我已经用这个描述编写了一个代码:
第一个按钮调用FuncPopup();
函数,之后每个弹出对话框都会创建一个新按钮。新建按钮创建FuncPopup();
。旧按钮应该有各种各样的行为。
private void FuncPopup()
{
FuncMenu popup = new FuncMenu();
popup.ShowDialog();
if (popup.DialogResult.HasValue && popup.DialogResult.Value)
{
i++;
newBtn[i] = new Button();
FuncGird.Children.Add(newBtn[i]);
Grid.SetColumn(newBtn[i], i);
Grid.SetRow(newBtn[i], j);
newBtn[i].Click += (sender, e) => clicked(i);
}
}
void clicked(int g) {
if (g >= i)
{
FuncPopup();
}
else (g < i){
OtherFunction();
}
}
i
是一个全局变量。我希望旧按钮运行OtherFunction();
,但它们始终运行FuncPopup();
。
答案 0 :(得分:1)
那是因为正如你所说i
是全局变量,你附加了以下处理程序:
newBtn[i].Click += (sender, e) => clicked(i);
你一直在增加i
。您可能认为i
的值在您附加此处理程序时是固定的,但事实并非如此。 i
中的clicked(i)
是相同的全局变量,每次调用都会递增。因此g
始终等于该处理程序中的i
,因此调用所有按钮FuncPopup
。
而是将i
保存到局部变量并使用:
int tmp = i;
newBtn[i].Click += (sender, e) => clicked(tmp);