我有一个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中的事件调用到表单。
答案 0 :(得分:0)
那么现在我不知道你是否明确想要使用委托,不是吗?如果没有,你为什么不这样做:
public Form1()
{
userControlInstance._button.Click += OnUCButtonClicked;
}
private void OnUCButtonClicked(object sender, EventArgs e)
{
throw new NotImplementedException();
}
答案 1 :(得分:0)
到目前为止,您的代码无法编译。您使用的是错误的事件处理程序类型。它应该显示以下编译器错误:
无法将EventHandler转换为ButtonClickedEventHandler
执行以下步骤:
1)将委托的声明放在课程UserControlerConstructor
之外:
public delegate void ButtonClickedEventHandler(object sender, EventArgs e);
public partial class UserControlerConstructor: UserControl
{
1)然后在Form
注册事件时更改处理程序的类型:
public Form1()
{
userControlInstance.OnUserControlButtonClicked += new ButtonClickedEventHandler(OnUCButtonClicked);
}
这种方式应该可行