C# 如何在表单中知道UserControl中单击的按钮的名称

C# 如何在表单中知道UserControl中单击的按钮的名称,c#,winforms,user-controls,C#,Winforms,User Controls,我有一个Windows窗体和一个用户控件。用户控件有三个按钮。 我想知道我的UserControl的哪些按钮被点击了。 我需要点击按钮的名称,以开始一个特定的过程 在表格1中: if(User-Control1.Button1.clicked) Messagebox.show(Button.name); if(Button2.clicked) Messagebox.show(Button.name); 您可以创建此代码 private void button_Click(object

我有一个Windows窗体和一个用户控件。用户控件有三个按钮。
我想知道我的UserControl的哪些按钮被点击了。 我需要点击按钮的名称,以开始一个特定的过程

在表格1中:

if(User-Control1.Button1.clicked)
  Messagebox.show(Button.name);

if(Button2.clicked)
  Messagebox.show(Button.name);

您可以创建此代码

private void button_Click(object sender, EventArgs e)
    {
        var buttonName = ((Button)sender).Name;
         Messagebox.show(buttonName);
    }

并将每个按钮的单击事件连接到此处理程序。

如果您只需要按钮名称,则UserControl中的自定义事件可以将按钮名称作为事件参数发送。可以在按钮的单击事件中调用该事件。在事件中传递var name=((按钮)sender).name。

考虑以下简单的用户控件:

您有3个按钮和3个文本框控件用于输入某些值:
这三个按钮分别命名为
btnAddTask1
btnAddTask2
btnAddTask3

这三个文本框分别命名为
txtaskname
txtInput2a
txtInput2b

在设计器中,选择所有3个按钮,然后在PropertyGrid中,指定一个
Click
事件处理程序,所有按钮都是如此。给它一个有意义的名称(在这里,处理程序名为
btnActionTasks

添加公共自定义事件:

public event EventHandler<ActionTaskEventArgs> ActionTaskClicked;
在Form类中,事件处理程序在UserControl的
ActionTaskEventArgs
中返回一些值:

private void ucButtonActions1_ActionTaskClicked(object sender, UCButtonActions.ActionTaskEventArgs e)
{
    string message = $"You clicked: {e.TaskName}\r\n"+
        $"The String Value is: {e.TaskStringValue}\r\n"+
        $"The Numeric Value is: {e.TaskNumericValue}\r\n";

    MessageBox.Show(message);
}
这就是它的工作原理:


我只想在主窗体中获取按钮名称。非用户控件显示messagebox。此问题需要更多详细信息和清晰度
发件人
对象将告诉您姓名。请参阅第一个副本。使用事件将该信息传播回容器对象(表单)。请看最后一个副本。@Peter Duniho这些副本中的大多数与问题无关。唯一可能相关的是最后一个问题,其中公认的答案(人们最常考虑的答案)是我在WinForms中看到的最糟糕的事情之一。唯一正确的是你贴的那张;你可以直接把它联系起来。@Jimi:我不同意。这个问题一开始就太宽泛了;OP真正要问的不仅仅是一个问题。但就他们提出的问题而言,他们需要知道的一切都已经在这个网站上得到了回答,而且这些答案都在副本中找到了。@Peter Duniho当然,问题的主体是缺乏的,但标题很清楚:如何以一种形式知道在用户控件中单击的按钮的名称。前三份副本不相关。-我并不是说这不是一个复制品(因为它是)。我是说,这个问题唯一正确的答案是你在上一个链接副本中的答案(我已经提到了原因)可能直接链接(明确排除已接受的答案),但其他答案并不重要。
private void ucButtonActions1_ActionTaskClicked(object sender, UCButtonActions.ActionTaskEventArgs e)
{
    string message = $"You clicked: {e.TaskName}\r\n"+
        $"The String Value is: {e.TaskStringValue}\r\n"+
        $"The Numeric Value is: {e.TaskNumericValue}\r\n";

    MessageBox.Show(message);
}