C# windows窗体中具有相同事件的多个按钮,在事件中我需要所选按钮的名称

C# windows窗体中具有相同事件的多个按钮,在事件中我需要所选按钮的名称,c#,visual-studio,winforms,C#,Visual Studio,Winforms,我有46个按钮的形式和他们所有的相同的工作只是不同的价值。 平均值按钮1加1求和,按钮2加2求和。。。 是否有办法了解按下哪一个按钮以获取文本 private void button1_Click(object sender, EventArgs e) { // call a function with this button TEXt // if button 1 selected -> func("1") // if button

我有46个按钮的形式和他们所有的相同的工作只是不同的价值。 平均值
按钮1
加1求和,
按钮2
加2求和。。。 是否有办法了解按下哪一个按钮以获取文本

private void button1_Click(object sender, EventArgs e)
    {
        // call a function with this button TEXt
        // if button 1 selected -> func("1")
        // if button 2 selected -> func("2")
    } 

有什么方法可以做到吗?

最简单的解决方案是为每个按钮创建一个事件单击(因此按钮1单击、按钮2单击等)。最好将按钮命名为合适的

而不是在每个事件处理程序中,调用相同的函数将数字添加到总和中,例如:

private void button1_Click(object sender, EventArgs e)
{
    add(1);
} 

private void button2_Click(object sender, EventArgs e)
{
    add(2);
} 

// Same for other event handlers.

private void add(int number)
{
   sum += number;
}

最简单的解决方案是为每个按钮创建一个事件单击(因此按钮1单击、按钮2单击等)。最好将按钮命名为合适的名称

而不是在每个事件处理程序中,调用相同的函数将数字添加到总和中,例如:

private void button1_Click(object sender, EventArgs e)
{
    add(1);
} 

private void button2_Click(object sender, EventArgs e)
{
    add(2);
} 

// Same for other event handlers.

private void add(int number)
{
   sum += number;
}

sender
返回您的按钮。因此您可以像

Button clicked = (Button)sender;
在指定按钮时,您可以检查发送者按钮的
文本
,也可以给它们
标签
并检查它们。您说的是文本,所以

Button clicked = (Button)sender;
func(clicked?.Text);

应该可以用。

发送方将返回您的按钮。这样您就可以像

Button clicked = (Button)sender;
Button clickedButton = sender as Button;

    if (clickedButton != null)
    {
        button.Name....
    }
在指定按钮时,您可以检查发送者按钮的
文本
,也可以给它们
标签
并检查它们。您说的是文本,所以

Button clicked = (Button)sender;
func(clicked?.Text);

应该可以工作。

您可以链接所有事件处理程序,然后使用
Name
属性确定单击了哪个按钮

Button clickedButton = sender as Button;

    if (clickedButton != null)
    {
        button.Name....
    }
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Click += this.button1_Click;

private void button1_Click(object sender, EventArgs e)
        {
            var btn = sender as Button;

            switch(btn.Name.ToLower())
            {
                case "button1":
                    MessageBox.Show("Add 1");
                    break;
                case "button2":
                    MessageBox.Show("Add 2");
                    break;
                default:
                    MessageBox.Show("Button not found");
                    break;
            }
        }

您可以链接所有事件处理程序,然后使用
Name
属性确定单击了哪个按钮

this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Click += this.button1_Click;

private void button1_Click(object sender, EventArgs e)
        {
            var btn = sender as Button;

            switch(btn.Name.ToLower())
            {
                case "button1":
                    MessageBox.Show("Add 1");
                    break;
                case "button2":
                    MessageBox.Show("Add 2");
                    break;
                default:
                    MessageBox.Show("Button not found");
                    break;
            }
        }

我知道这一点,但它会导致46函数有什么方法可以同时完成所有功能吗?我不知道,但在这种情况下,我通常会做的是,在事件中放置一个断点,启动调试器,并检查发送方在内部的外观;我确信有一些线索表明选择了哪个按钮。(根据其他答案,发送方就是按钮)。我知道这一点,但它会导致46函数有任何方法可以同时完成所有操作吗?我不知道,但在这种情况下,我通常会做的是在事件中放置一个断点,启动调试器,并检查发送者在内部的外观;我确信有一些线索表明选择了哪个按钮。(根据其他答案,发送者就是按钮)。按钮在WinForms中只有一个
文本
属性,但没有
内容
属性。除此之外,这应该是可接受的答案。我从这篇文章中得到了答案,并将尽可能标记为答案。哦,我错过了表单部分,并认为这是WPF。编辑rn。按钮只有
文本
属性,但没有WinForms中的
Content
属性。除此之外,这应该是可接受的答案。我从这篇文章中得到答案,并将尽可能标记为答案。哦,我错过了表单部分,并认为这是WPF。编辑rn。