首页 > 解决方案 > 如何为表单设计器上的自定义控件添加 EventHandler?

问题描述

目标:

FormA 有 CustomButtonA。
当我单击 CustomButtonA 时,我希望 FormA 调用 MethodA

失败的尝试:

在 FormA 的设计师上,我补充说:

this.instanceOfButtonA.Click+= new System.EventHandler(this.buttonAPressed);

在 FormA 上,我还添加了:

private void buttonAPressed(object sender, EventArgs e)
{
   MethodA();
}

结果:从未调用过 MethodA

“解决方案”

在 CustomButtonA 我添加了

public delegate void EventHandler(object sender, System.EventArgs args);
public event EventHandler OnClickEvent = delegate { };

protected override void OnControlAdded(ControlEventArgs e)
{
     e.Control.Click += new System.EventHandler(Control_Click);
     base.OnControlAdded(e);
}

void Control_Click(object sender, System.EventArgs e)
{
       OnClickEvent(this, new System.EventArgs());
}

在 FormA 的构造函数中,我添加了:

this.instanceOfButtonA.OnClickEvent += (sender, args) => { MethodA(); };

作为替代方案,我想我可以使用委托,以便 buttonA 可以调用 MethodA 而不必抛出 FormA 处理的事件

问题:
我可以做些什么来使我失败的尝试成功吗?
我对我的解决方案的工作方式并不满意

标签: c#

解决方案


推荐阅读