我如何区分按钮单击事件

时间:2010-06-11 14:19:00

标签: c# wpf button

我有一个问题。我正在制作一些wpf按钮动态通过C#.i m使用它一个循环为此我现在试图找到所有按钮点击事件。 我发现它但它在所有工作相同按钮单击 我怎么能不同所有的按钮。

先谢谢 沙善

`for (int i = 0; i < 2; i++)
        {
            Button b1 = new Button();
            //this.RegisterName("myAnimatedBrush", b1);
            b1.Name = "button" + i;     
            b1.Height = 200;
            b1.Width = 200;
            b1.Margin = new Thickness(0, -100, 0, 0);
            b1.HorizontalAlignment = HorizontalAlignment.Left;
            b1.Content = "English";
            b1.Background = System.Windows.Media.Brushes.Pink;
            b1.Click+=new RoutedEventHandler(b1_Click);
            canvasbtn.Children.Add(b1);
            Canvas.SetLeft(b1,b1.Width * i);

        }`

3 个答案:

答案 0 :(得分:1)

我的两分钱:

如果您希望在循环中创建的按钮的行为方式不同,请考虑按钮本身的不同之处并检查它。例如:

  • 如果每个按钮都是从不同的数据项生成的,请设置其DataContext并使用它来查找原始数据项。
  • 如果每个按钮都已编号,请将DataContext设置为按钮编号。
  • 如果每个按钮的含义不同,请将Click设置为不同的事件处理程序。您可以创建这些数组。或者将每个按钮附加一个不同的对象作为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
}

我建议你强烈考虑使用DockPanel而不是Canvas。除非您需要最终用户进行任意定位(拖放),否则Canvas几乎从不使用正确的面板。如果您使用DockPanel,则不必设置左坐标 - 它会自动为您执行此操作。

答案 1 :(得分:0)

void b1_Click(object sender, RoutedEventArgs e)
{
    Button srcButton = e.Source as Button;
}

Source&amp; More

答案 2 :(得分:0)

这可能会有用。

 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();
            }
            ...
        }