C#,如何创建一个事件并在另一个类中监听它?

the*_*ser 5 c# winforms

我不知道如何做到这一点,这是示例代码。我想做的事。

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)

Mus*_*hin 5

步骤 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)