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# 如何区分按钮单击事件_C#_Wpf_Button - Fatal编程技术网

C# 如何区分按钮单击事件

C# 如何区分按钮单击事件,c#,wpf,button,C#,Wpf,Button,我有个问题。我正在通过C#使一些wpf按钮动态。我正在为此使用一个循环,现在我正在尝试查找所有按钮单击事件。 我发现它,但它的所有工作按钮点击相同 我怎样才能区分所有的按钮 提前谢谢 沙申克 `for(int i=0;i

我有个问题。我正在通过C#使一些wpf按钮动态。我正在为此使用一个循环,现在我正在尝试查找所有按钮单击事件。 我发现它,但它的所有工作按钮点击相同 我怎样才能区分所有的按钮

提前谢谢 沙申克

`for(int i=0;i<2;i++)
{
按钮b1=新按钮();
//此注册表名(“myAnimatedBrush”,b1);
b1.Name=“button”+i;
b1.高度=200;
b1.宽度=200;
b1.余量=新厚度(0,-100,0,0);
b1.水平对齐=水平对齐。左;
b1.Content=“英语”;
b1.Background=System.Windows.Media.brusks.Pink;
b1.单击+=新建路由EventHandler(b1_单击);
儿童画布添加(b1);
画布.左置(b1,b1.宽度*i);
}`

&

这样的事情可能会奏效

 protected void HandleBtnClick(object sender, EventArgs args)
        {
            Button btn = sender as Button;
            if(btn==null){ 
               return; //This is not expected.
            }
            if(btn.Name=="button1")
            {
                DoFirstTask();
            }
            else if (btn.Name == "button2")
            {
                DoSecondTask();
            }
            ...
        }
我的两分钱:

如果希望在循环中创建的按钮都有不同的行为,请思考按钮本身的不同之处,并进行检查。例如:

  • 如果每个按钮都是从不同的数据项生成的,则设置其DataContext并使用它来查找原始数据项
  • 如果每个按钮都已编号,请将DataContext设置为按钮编号
  • 如果每个按钮具有不同的含义,请将单击设置为不同的事件处理程序。您可以创建这些元素的数组。或者将不同的对象作为CommandParameter附加到每个按钮
如果您根据对最终用户来说很重要的东西来区分您的行为,那么您的代码将是最有意义的

例如:

 for(int i=0; 0<10; i++)
 {
   var btn = new Button
   {
     DataContext = i,
     Height = 200, Width = 200,
     Margin=new Thickness(0, 100, 0 0),
   });
   btn.Click += (sender, e) =>
   {
     MessageBox.Show("You clicked button " + ((Button)sender).DataContext);
   };
   dockPanel.Children.Add(btn); // Or you could use Canvas & Canvas.SetLeft
}
for(int i=0;0
{
Show(“您单击了按钮”+((按钮)sender.DataContext);
};
dockPanel.Children.Add(btn);//或者您可以使用Canvas&Canvas.SetLeft
}

我建议您强烈考虑使用DokPad而不是画布,除非您需要最终用户的任意定位(拖放)。,Canvas几乎从来都不是要使用的右面板。如果你使用DockPanel,你不必设置左坐标,它会自动为你设置左坐标。

我想你把咖啡洒在键盘上了。哎哟!真是一场噩梦。SHASHANK将按钮命名为“button1”,等等,这是个糟糕的主意(它们不需要名称)。嵌套的“If()”这样的名字更糟糕。至少让它成为一个switch()。如果你处理btn==null,它应该抛出一个异常而不仅仅是返回!我会采取完全不同的策略,鼓励SHASHANK采用更好的设计,让他在用户将看到的东西(颜色、内容等)上有所区别。
 protected void HandleBtnClick(object sender, EventArgs args)
        {
            Button btn = sender as Button;
            if(btn==null){ 
               return; //This is not expected.
            }
            if(btn.Name=="button1")
            {
                DoFirstTask();
            }
            else if (btn.Name == "button2")
            {
                DoSecondTask();
            }
            ...
        }
 for(int i=0; 0<10; i++)
 {
   var btn = new Button
   {
     DataContext = i,
     Height = 200, Width = 200,
     Margin=new Thickness(0, 100, 0 0),
   });
   btn.Click += (sender, e) =>
   {
     MessageBox.Show("You clicked button " + ((Button)sender).DataContext);
   };
   dockPanel.Children.Add(btn); // Or you could use Canvas & Canvas.SetLeft
}