我不知道如何做到这一点,这是示例代码。我想做的事。
public Class MainForm : Form
{
MyUserControl MyControl = new MyUserControl;
private void Button_Click(object sender, EventArgs e)
{
//Create MyEvent
}
}
public Class MyUserControl : UserControl
{
//listen for MyEvent from MainForm, and perform MyMethod
public void MyMethod()
{
//Do Stuff here
}
}
Run Code Online (Sandbox Code Playgroud)
步骤 1) 在 MainForm 上公开一个事件...比如说..
public event Action simpleEvent
Run Code Online (Sandbox Code Playgroud)
步骤 2) 为 MyUserControl 提供一个构造函数,该构造函数采用 MainForm 实例并将操作绑定到该事件
public MyUserControl(MainForm form) {
form += () => Console.WriteLine("We're doing something!")
}
Run Code Online (Sandbox Code Playgroud)
步骤3)在MainForm.Button_Click中引发事件
if(simpleEvent != null) simpleEvent();
Run Code Online (Sandbox Code Playgroud)
注意:您可以注册自己的委托并使用 lambda 表达式以外的其他内容。请参阅http://msdn.microsoft.com/en-us/library/17sde2xt.aspx以获取更全面的解释
你的最终结果看起来像......
public Class MainForm : Form
{
public event Action MyEvent;
MyUserControl MyControl = new MyUserControl(this);
private void Button_Click(object sender, EventArgs e)
{
if(simpleEvent != null) simpleEvent();
}
}
public Class MyUserControl : UserControl
{
//listen for MyEvent from MainForm, and perform MyMethod
public MyUserControl(MainForm form) {
simpleEvent += () => MyMethod();
}
public void MyMethod()
{
//Do Stuff here
}
}
Run Code Online (Sandbox Code Playgroud)