【发布时间】:2017-09-28 09:53:19
【问题描述】:
我有一个 userControl,那里有一个按钮,当我从 userControl 单击主窗体中的按钮时,我想调用事件。我这样做:
用户控制
public UserControlerConstructor()
{
_button.Click += new EventHandler(OnButtonClicked);
}
public delegate void ButtonClickedEventHandler(object sender, EventArgs e);
public event ButtonClickedEventHandler OnUserControlButtonClicked;
private void OnButtonClicked(object sender, EventArgs e)
{
// Delegate the event to the caller
if (OnUserControlButtonClicked != null)
OnUserControlButtonClicked(this, e);
}
表格
public Form1()
{
userControlInstance.OnUserControlButtonClicked += new EventHandler(OnUCButtonClicked);
}
private void OnUCButtonClicked(object sender, EventArgs e)
{
throw new NotImplementedException();
}
它不起作用,因为当我在表单中单击时,在表单代码中什么都不做,但它在 userControl 代码中起作用。但我想用表单代码来做。我不知道如何从 userControl 调用事件到表单。
【问题讨论】:
-
这个问题不是很清楚,但我的理解是你要求在表单控件中调用用户控件的事件。这是事件的一个限制,只有拥有类才能告诉何时到哪里调用事件。您只能在订阅类中注册事件处理程序。
-
无关:为什么要使用自定义委托?你可以做到
public event EventHandler OnUserControlButtonClicked -
是的,编译器不会停止它。
-
@Fildor 你是对的,错误的选择。 :)
-
您的代码无法编译:
EventHandler无法转换为ButtonClickedEventHandler
标签: c# winforms events user-controls