如何解决如何在表单中知道在 UserControl 中单击的按钮的名称
我有一个 Windows 窗体和一个用户控件。 UserControl 有三个按钮。
我想知道我的 UserControl 的哪些按钮被点击了。
我需要点击按钮的名称,以启动特定程序。
在 Form1 中:
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);
}
并将每个按钮的 Click 事件连接到此处理程序。
,如果您只需要按钮名称,则 UserControl 中的自定义事件可以将按钮名称作为事件参数发送。该事件可以在按钮的点击事件中调用。在事件中传递 var name = ((Button)sender).Name。
,考虑这个简单的用户控件:
您有 3 个按钮和 3 个文本框控件用于输入一些值:
这 3 个按钮分别命名为 btnAddTask1
、btnAddTask2
和 btnAddTask3
。
3 个文本框分别命名为 txtTaskName
、txtInput2a
和 txtInput2b
。
在设计器中,选择所有 3 个按钮,然后在 PropertyGrid 中分配一个 Click
事件处理程序,所有按钮都相同。给它一个有意义的名字(这里,处理程序被命名为 btnActionTasks
)
添加公共自定义事件:
public event EventHandler<ActionTaskEventArgs> ActionTaskClicked;
其中 ActionTaskEventArgs
是一个派生自 EventArgs
的自定义类,当事件发生时,它会返回一些值,点击其中一个按钮(见代码)。
当点击其中一个按钮时,您会引发事件,传入自定义 EventArgs
一些与当前文本框输入相关的值(或您需要的任何其他值)。
sender
对象被设置为 this
,即 UserControl 实例,因为您可能有多个这种类型的 UserControl用户界面。
自定义 EventArgs
属性之一设置为引发事件的按钮控件的名称;其他值也会传递给事件的订阅者(此处取自 TextBox)。
在您的表单中,从 ToolBox 中删除 UserControl 后,像往常一样使用 PropertyGrid 订阅其公共 ActionTaskClicked
事件,或手动,根据您的喜好。
当事件被引发时,因为用户点击了一个按钮,你会收到通知,你可以像往常一样读取事件参数中传递的值:
public partial class UCButtonActions : UserControl
{
public event EventHandler<ActionTaskEventArgs> ActionTaskClicked;
public UCButtonActions() => InitializeComponent();
private void btnActionTasks_Click(object sender,EventArgs e)
{
string buttonName = (sender as Control).Name;
// Or use the Text,the Tag or whatever other value
// string buttonTag = (sender as Control).Tag;
if (int.TryParse(txtInput2b.Text,out int value)){
var args = new ActionTaskEventArgs(buttonName,value,txtInput2a.Text);
ActionTaskClicked?.Invoke(this,args);
}
}
public class ActionTaskEventArgs : EventArgs
{
public ActionTaskEventArgs(string taskName,int value,string svalue)
{
TaskName = taskName;
TaskNumericValue = value;
TaskStringValue = svalue;
}
public string TaskName { get; }
public int TaskNumericValue { get; }
public string TaskStringValue { get; }
}
}
在 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);
}
这是它的工作原理:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。