winforms 所有用户控件示例都应侦听父窗体事件

2skhul33  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(153)

我在父表单中有许多使用者控件执行严修。现在,当我按一下父表单中的按钮时,我希望所有的使用者控件都以类似的方式变更。我希望每个控件都能侦听父表单中的事件,并在父表单中的事件引发后立即变更,而不是在使用者控件之间循环,并告诉每个控件要执行的动作。就像红绿灯一样:当他们进入绿色时,每辆车都启动了。我不必告诉每一个司机开车。这可能吗?

kknvjkwl

kknvjkwl1#

.Net通过事件和委托实现 “Observer” 模式。

// this is a Pseudocode
form.button.Click += DoSomething; // (object, EventArgs)

DoSomething(...)
{
    foreach(Control in form.controls)
    {
       // do whatever you need with your control
    }     
}

现在它变得有趣了。比如说,你创建自定义按钮、文本框;那么你

public class CustomButton : Button.....
public class CustomTextBox : TextBox.....

// And in these ^^^ custom controls you can do this
override void ParentChanged(...)
{
    var form = this.FindForm();
    form.[SomeEvent] += Listen(.....); // (object, EventArgs)
    base.ParentChanged(...);
}

public void Listen(.....) // (object, EventArgs)
{
     // DO whatever you want with this control
     // for each control type will be different code
}

第二种方法让.Net Observer完成所有工作,但您需要进行继承。
第一种方法看起来更简单。你只需要在一些switch中覆盖所有的控件类型。在第二种方法中,每个控件类型都可以做它自己需要做的事情。

相关问题