[問題] Closure的問題

看板C_Sharp作者 (jasper)時間9年前 (2015/04/07 20:37), 9年前編輯推噓1(103)
留言4則, 3人參與, 最新討論串1/2 (看更多)
小弟覺得應該是發生Closure的問題吧? 我想在10個按鈕上面掛10個觸發事件,Code大致上像: for(int index = 0;index < 10;index++){ btn[index].onClick += () => { Console.WriteLine(index.toString()); }; } 結果10個按鈕按下去,都是10... 試了很久都沒找到解決方式,目前是採用類似分成10段來寫的方法, 但我覺得這應該是很常見的狀況,應該有更合理的解決辦法吧? 想請問有沒有高手能幫我解答一下,非常感謝~ 以下附上一段Sample Code: class Program { static Button[] btnArray; static void Main(string[] args) { btnArray = new Button[10]; for (int index = 0; index < 10; index++) { btnArray[index] = new Button(); btnArray[index].onClick += () => { Console.WriteLine(index.ToString()); }; } foreach (Button btn in btnArray) { btn.Click(); } Console.ReadKey(); } } class Button { public delegate void Del(); public event Del onClick; public void Click() { onClick(); } } 希望的要求是能夠列出 1~10,但結果都是10 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.20.242 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1428410250.A.08E.html

04/07 20:53, , 1F
可以po完整一點的code嗎?
04/07 20:53, 1F
嗯~目前我手上可能沒辦法PO出比較完整的code @@ 不過onClick在Button的Class中是這樣: public delegate void BtnDel(); public event BtnDel onClick; ※ 編輯: jamod (61.223.20.242), 04/07/2015 20:59:27

04/07 21:11, , 2F
你可以寫一個sample code
04/07 21:11, 2F
※ 編輯: jamod (61.223.20.242), 04/07/2015 21:37:10

04/07 21:40, , 3F
你的問題是不是你10個Button的OnClick事件,是要指向同一
04/07 21:40, 3F

04/07 21:41, , 4F
函式,但是函式內你卻不知道是哪個按鈕觸發了事件????
04/07 21:41, 4F
我是希望btn[0]對應到Console.WriteLine("0"); btn[1]對應到Console.WriteLine("1"); . . . 以此類推 但出來的結果是btn[0]對應到Console.WriteLine("10"); btn[1]對應到Console.WriteLine("10"); . . . ※ 編輯: jamod (61.223.20.242), 04/07/2015 22:03:54
文章代碼(AID): #1L8y-A2E (C_Sharp)
討論串 (同標題文章)
文章代碼(AID): #1L8y-A2E (C_Sharp)