事件的发送者实际上是按钮之一。当您将 sender 转换为 Button 类型时,您可以访问任何 Buttons 属性并确定按下了哪个按钮:
void uco_OnButtonclick(object sender, EventArgs e)
{
Button button = sender as Button;
if (button == null)
return;
lblStatus.Text = button.Name;
}
更新:再次阅读您的问题后,我知道 ucTask 实际上是 UserControl,当单击其中的按钮时会引发事件。
所以,首先是命名。c# 中类名的良好风格是 PascalCase。例如,对于任务用户控制好名称将是TaskControl
. 接下来是事件命名。通常将事件命名为EventName(-ing, -ed)
. 如果你想引发事件,那么好的风格就是受保护的方法OnEventName(-int, -ed)
。还有一句话——当你编写用户控件时,你可以自由地使用商业术语来命名你的事件。例如TaskCreated、TaskChanged。您还可以通过创建自定义 EventArgs 将任何参数传递给您的事件。
因此,对于您的用户控制:
public class TaskChangedEventArgs : EventArgs
{
public TaskChangedEventArgs(int taskId)
{
TaskId = taskId;
}
public int TaskId { get; private set; }
}
public class TaskControl : UserControl
{
public event EventHandler<TaskChangedEventArgs> TaskChanged;
// raise it inside button click event handler
protected void OnTaskChanged(int taskId)
{
if (TaskChanged != null)
TaskChanged(this, new TaskChangedEventArgs(taskId));
}
}
当你使用你的用户控件时,只需订阅它的 TaskChanged 事件:
uct.TaskChanged += new EventHandler<TaskChangedEventArgs>(uct_TaskChanged);
您通过事件参数传递的所有参数都将在该事件处理程序中可用:
void uco_TaskChanged(object sender, TaskChangedEventArgs e)
{
lblStatus.Text = e.TaskId.ToString();
}