在C#中,我创建了一个继承自UserControl的自定义控件,并在自定义控件中添加了一个按钮btnInTrayMap。 然后我将自定义控件添加到主窗体。主窗体有另一个按钮,用于比较它们的行为。 我观察到的是,主窗体上的按钮在单击时工作正常。但是,驻留在自定义控件中的按钮btnInTrayMap在单击时根本不响应。
我在自定义控件中有以下代码:
public partial class TrayMap : UserControl
{
public TrayMap()
{
InitializeComponent();
}
public event EventHandler MyCustomClickEvent;
protected virtual void OnMyCustomClickEvent(object sender, EventArgs e)
{
if (MyCustomClickEvent != null)
MyCustomClickEvent(this, e);
}
private void btnInTrayMap_Click(object sender, EventArgs e)
{
OnMyCustomClickEvent(sender, EventArgs.Empty);
}
}
我相信TratMap.designer.cs中的btnTrayMap.Click事件处理程序可能导致了这个问题:
this.btnInTrayMap.Click += new System.EventHandler(this.btnInTrayMap_Click);
在主窗体中,我有以下代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnInForm_Click(object sender, EventArgs e)
{
MessageBox.Show("Test Button In Form", "btnInForm Button Clicked", MessageBoxButtons.OK);
}
public void MyCustomClickEvent(object sender, EventArgs e)
{
Button button = sender as Button;
MessageBox.Show("Test Button In TrayMap", button.Text + " Button Clicked", MessageBoxButtons.OK);
}
}
我想知道如何设置事件委托,以便在单击按钮btnInTrayMap时执行主窗体中的MyCustomClickEvent方法。 谢谢。
答案 0 :(得分:1)
您尚未在主表单中注册活动。试试这种方式。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
trayMap.MyCustomClickEvent += MyCustomClickEvent; // i'm assuming trayMap is the name of user control in main form.
}
private void btnInForm_Click(object sender, EventArgs e)
{
MessageBox.Show("Test Button In Form", "btnInForm Button Clicked", MessageBoxButtons.OK);
}
private void MyCustomClickEvent(object sender, EventArgs e)
{
Button button = sender as Button;
MessageBox.Show("Test Button In TrayMap", button.Text + " Button Clicked", MessageBoxButtons.OK);
}
}