【问题标题】:How can I subscribe multiple buttons to the same event handler and act according to what button was clicked?如何将多个按钮订阅到同一个事件处理程序并根据单击的按钮进行操作?
【发布时间】:2010-09-28 15:13:54
【问题描述】:

我有 6 个按钮要附加到同一个处理程序。我该怎么做?

【问题讨论】:

  • 这就是我要避免的。我可以双击设计器视图上的按钮并生成 6 个存根,但是当我可以将按钮订阅到单个事件时,我为什么要这样做。
  • 而不是双击,下拉列表并选择现有的处理程序...
  • 为什么投反对票?这是一个完全正常的(初学者)问题。

标签: c# event-handling


【解决方案1】:

您可以通过将相同的方法绑定到每个按钮的单击事件来将相同的事件附加到多个按钮

myButton1.Click += new MyButtonClick;
myButton2.Click += new MyButtonClick;
myButton3.Click += new MyButtonClick;
myButton4.Click += new MyButtonClick;
myButton5.Click += new MyButtonClick;
myButton6.Click += new MyButtonClick;

void MyButtonClick(object sender, EventArgs e)
{
    Button button = sender as Button;
    //here you can check which button was clicked by the sender
}

【讨论】:

  • 我已经使用 CommandName 和 CommandArgument 来识别链接到同一个 onclick 事件的不同按钮。我为你 +1。
  • 我必须删除新的关键字才能使其工作。
【解决方案2】:

当您订阅按钮上的事件时,它只是一个标准事件处理程序:

button1.Click += myEventHandler;

您可以使用相同的代码为每个按钮添加处理程序:

button1.Click += myEventHandler;
button2.Click += myEventHandler;
button3.Click += myEventHandler;
button4.Click += myEventHandler;
button5.Click += myEventHandler;
button6.Click += myEventHandler;

这将导致您在myEventHandler 中的处理程序在任何按钮被点击时运行。

【讨论】:

    【解决方案3】:

    只需将按钮连接到同一个事件:

    myButton1.Click += Button_Click;
    myButton2.Click += Button_Click;
    myButton3.Click += Button_Click;
    ...
    

    并相应地处理按钮:

    private void Button_Click(object sender, EventArgs e)
    {
        string buttonText = ((Button)sender).Text;
    
        switch (buttonText)
        {
            ...
        }
    }
    

    sender 对象包含对导致 Click 事件的按钮的引用。您可以将其转换回Button,并访问您需要区分实际按钮的任何属性。

    【讨论】:

    • 演员最终缺少装配信息。
    【解决方案4】:

    如何查看按下了哪个按钮:

    使用sender

    Button myButton = (Button)sender;
    

    sender 是事件处理程序中object 类型的参数。

    【讨论】:

      【解决方案5】:

      您可以将事件处理程序的名称粘贴到设计器属性网格中的事件,而不是双击设计器中的事件。

      【讨论】:

        【解决方案6】:
        myButton1.Click += new EventHandler(MyButtonClick);
        myButton2.Click += new EventHandler(MyButtonClick);
        myButton3.Click += new EventHandler(MyButtonClick);
        myButton4.Click += new EventHandler(MyButtonClick);
        myButton5.Click += new EventHandler(MyButtonClick);
        myButton6.Click += new EventHandler(MyButtonClick);
        
        public void MyButtonClick(object sender, MouseButtonEventArgs e)
        {
                        switch ((sender as Button).Name)
                        {
                        case "button1":
                            //actions
                            break;
                        case "button2":
                            //actions
                            break;
                        default:
                            break;
                       }
        }
        

        【讨论】:

        • 它说“找不到按钮的类型或名称空间。”
        【解决方案7】:

        我不是专家,但我使用它,它看起来很简单

        <Button x:Name="Button1" Content="Button" Click="Button_Click"/>
        <Button x:Name="Button2" Content="Button" Click="Button_Click"/>
        

        只需给两个按钮相同的点击事件

        【讨论】:

          【解决方案8】:

           button1.Click += button_Click;
           button2.Click += button_Click;
          
          void button_Click(object sender, EventArgs e)
                  {
                      if (sender == button1)
                      {
                          this.Text = "1";
                      }
                      else if (sender == button2)
                      {
                          this.Text = "2";
                      }
                  }

          【讨论】:

          • 你能解释一下你的答案吗?
          【解决方案9】:

          在 main.axml 中将其添加到所有按钮

          android:clickable="whateveryoulike"
          

          所有的按钮都需要有相同的id

          在 MainActivity 中

          [Java.Interop.Export("whateveryoulike")]
          void whateveryoulike2(View v){
          Button button=(Button) v;
          //your code here
          }
          

          方法的名称无关紧要

          【讨论】:

            猜你喜欢
            • 2017-02-04
            • 2014-11-07
            • 2011-09-13
            • 1970-01-01
            • 1970-01-01
            • 2023-04-10
            • 1970-01-01
            • 2020-03-23
            • 1970-01-01
            相关资源
            最近更新 更多