C#/ WPF创建具有多个功能的新按钮数组

时间:2017-03-30 18:39:20

标签: c# wpf button dialog

我已经用这个描述编写了一个代码: 第一个按钮调用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();

1 个答案:

答案 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);