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变量,结果达到了我的预期。