Windows窗体:在运行时添加的控件之间连接自定义事件

本文关键字:之间 控件 连接 自定义 事件 添加 窗体 运行时 Windows | 更新日期: 2023-09-27 17:50:02

如果我有以下表单:
这里的截图

表单有多个usercontrols(橙色),其中也包含多个usercontrols(绿色)。

我的问题是:
1)如果我添加一个额外的"绿色"用户控件到一个"橙色"用户控件,什么是最好的方式来连接这个新的"绿色"用户控件到主窗体上的按钮事件(没有"橙色"或"绿色"用户控件知道主窗体)?
我想用"绿色"用户控件作为参数,从"橙色"用户控件向主表单触发一个事件,然后在主表单中处理连接。

2)有没有更好的"地方"来处理这些线路?

3)如果所有的"绿色"用户控件需要连接到彼此的事件(例如,如果其中一个的值改变了,所有其他的都需要通知),最好的方法是什么?我想创建一个单例类EventManager来处理这个?

我真的很纠结于松散耦合的用户控件的组合和连接。

我希望我的问题很清楚。

提前感谢,凯文

Windows窗体:在运行时添加的控件之间连接自定义事件

这是我的想法,任何控件/类都应该负责配置自己和它的直接子类的公共接口。类或控件的用户不需要知道它的父类或其子类的任何内部知识。

因此,在您的示例中,橙色控件应该订阅绿色控件事件并采取相应的行动,可能会将它们自己的事件提交给父控件,或者可能会影响兄弟绿色控件上的某些字段。当从橙色控件中添加和删除绿色控件时,橙色控件负责维护其内部"连接"。无论这发生在orange的公共方法还是私有方法中都是如此,如果主机能够通过orange上的某个公开的集合来执行此操作,则执行此操作的逻辑必须封装在orange中。

无论我们考虑的是橙色、宿主、绿色还是任何其他类/控件,这句话都是同样正确的。

在编码方面,当添加和删除控件时,您将希望使用+=-=与多播代表'事件订阅者模型。处理程序将被适当地编码。