【问题标题】:How to assign click event如何分配点击事件
【发布时间】:2011-02-24 09:34:18
【问题描述】:

我有一个在运行时动态生成的按钮数组。我的代码中有按钮点击功能,但我找不到在代码中设置按钮点击名称的方法。所以,

XAML 的等效代码是什么:

<Button x:Name="btn1" Click="btn1_Click">

或者,我应该为“????”放置什么在以下代码中:

Button btn = new Button();
btn.Name = "btn1";
btn.???? = "btn1_Click";

【问题讨论】:

    标签: c# wpf xaml event-handling


    【解决方案1】:
    Button btn = new Button();
    btn.Name = "btn1";
    btn.Click += btn1_Click;
    
    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        // do something
    }
    

    【讨论】:

    • 为什么使用+=?按钮是否包含多个单击事件?
    • @user189728 这是Event 系统在.NET 中的工作方式,您可以为任何事件订阅多个“处理程序”。您几乎可以将事件视为已覆盖 += 运算符的类,它本质上将回调附加到队列。
    • 是的,任何事件都可以有多个处理程序(函数回调,如果你想这样想的话)
    【解决方案2】:

    以下应该可以解决问题:

    btn.Click += btn1_Click;
    

    【讨论】:

      【解决方案3】:
      // sample C#
      public void populateButtons()
      {
          int xPos;
          int yPos;
      
          Random ranNum = new Random();
      
          for (int i = 0; i < 50; i++)
          {
              Button foo = new Button();
              Style buttonStyle = Window.Resources["CurvedButton"] as Style;
      
              int sizeValue = ranNum.Next(50);
      
              foo.Width = sizeValue;
              foo.Height = sizeValue;
              foo.Name = "button" + i;
      
              xPos = ranNum.Next(300);
              yPos = ranNum.Next(200);
      
              foo.HorizontalAlignment = HorizontalAlignment.Left;
              foo.VerticalAlignment = VerticalAlignment.Top;
              foo.Margin = new Thickness(xPos, yPos, 0, 0);
      
              foo.Style = buttonStyle;
      
              foo.Click += new RoutedEventHandler(buttonClick);
              LayoutRoot.Children.Add(foo);
         }
      }
      
      private void buttonClick(object sender, EventArgs e)
      {
        //do something or...
        Button clicked = (Button) sender;
        MessageBox.Show("Button's name is: " + clicked.Name);
      }
      

      【讨论】:

        【解决方案4】:

        我认为 WPF 不支持您尝试实现的目标,即使用方法名称或 btn1.Click = "btn1_Click" 将方法分配给按钮。您将不得不使用上述答案中建议的方法,即使用适当的方法注册按钮单击事件 btn1.Click += btn1_Click;

        【讨论】:

          【解决方案5】:

          你应该放在下面一行

          btn.Click = btn.Click + btn1_Click;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-29
            • 2013-11-09
            • 2017-05-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多