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

标签 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
    }
}

最佳答案

第 1 步)在 MainForm 上公开一个事件......比如说......

public event Action simpleEvent

步骤 2) 为 MyUserControl 提供一个构造函数,该构造函数采用 MainForm 的实例并将操作绑定(bind)到该事件

public MyUserControl(MainForm form) {
    form += () => Console.WriteLine("We're doing something!")
}

第 3 步)在 MainForm.Button_Click 中引发事件

if(simpleEvent != null) simpleEvent();

注意:您可以注册自己的委托(delegate)并使用 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
    }
}

关于C#,如何创建一个事件并在另一个类中监听它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566617/

相关文章:

c# - 从 C# 中的字符串检测 SQL 查询

c# - 为什么我的数据在我没有改变的时候却在改变?

c# - 如何通过运行时嵌入表单切换来实现a-form-inside-a-form?

c# - 如何取消选择按钮 `Select all` 而不是所有项目?

vb.net - DataGridViewRowsAdded 处理程序给出错误

c# - 引用自身的编码类型

c# - 涉及递归的 TPL 数据流未完成

C# - 从 Windows 服务运行 WPF 应用程序

java - 在 Selenium 中,使用显式等待时是否需要禁用隐式等待?

c# - 使用 C#.net 在 winform 中调用和使用 Web API