Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#/WPF创建具有多功能的新按钮阵列_C#_Wpf_Button_Dialog - Fatal编程技术网

C#/WPF创建具有多功能的新按钮阵列

C#/WPF创建具有多功能的新按钮阵列,c#,wpf,button,dialog,C#,Wpf,Button,Dialog,我写了一段代码,描述如下: 第一个按钮调用FuncPopup()功能,然后每个弹出对话框创建新按钮。新建按钮创建FuncPopup()。旧按钮应具有各种行为 private void FuncPopup() { FuncMenu popup = new FuncMenu(); popup.ShowDialog(); if (popup.DialogResult.HasValue && popup.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();
        }
    }
private void FuncPopup()
{
FuncMenu popup=新建FuncMenu();
popup.ShowDialog();
if(popup.DialogResult.HasValue&&popup.DialogResult.Value)
{
i++;
newBtn[i]=新按钮();
FuncGird.Children.Add(newBtn[i]);
Grid.SetColumn(newBtn[i],i);
Grid.SetRow(newBtn[i],j);
newBtn[i]。单击+=(发送者,e)=>单击(i);
}
}
单击无效(int g){
如果(g>=i)
{
FuncPopup();
}
else(g

i
是一个全局变量。我希望旧按钮运行
OtherFunction()但它们总是运行
FuncPopup()

这是因为正如您所说,
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);

很好,我在本地定义了tmp变量,结果达到了我的预期。