我有以下用於創建動態按鈕的代碼,但消息框總是顯示8.我如何使它在示例4中顯示,當我單擊button[0][4]
時?我已經試過labda和委託,但總是返回8(text[i].Count
)。同樣的事情發生在變量i
。 它必須是很簡單的東西,但我不能找到它:-(。將變量傳遞給Click事件
private void Form1_Load(object sender, EventArgs e)
{
for(int i = 0; i < text.Count; i++) // text.Count is 3
{
for(int a = 0; a < text[i].Count; a++) // text[i].Count is 8
{
button[i][a].Location = new Point(230, 30 +22 *a);
button[i][a].Text = "Done" + i + " " + a;
button[i][a].Click += delegate { click(a); };
...
private void click(int a)
{
MessageBox.Show("" +a);
}
難道這個「突破性改變」很快就會發生......?變量在循環內部的位置? –
我不確定,但在這種特殊情況下,他使用的是int,而不是引用類型。所以看起來好像一切都會好的 – Anarion
@SLaks你是說聲明'int newVariable = a'和'委託{click(newVariable);};'會解決這個問題嗎?我同意它會拿起最後一個值,但我不太確定聲明一個新的變量將解決這個問題......我認爲這需要一個不同的解決方案。 – CarbineCoder