问题描述
|
如果我有以下表格:
屏幕截图在这里
表单具有多个用户控件(橙色),同时还包含多个用户控件(绿色)。
我的问题是:
1)如果我向一个“橙色”用户控件中添加了一个额外的“绿色”用户控件,那么将这个新的“绿色”用户控件连接到主窗体上的Button事件的最佳方法是什么(在没有'orange'或'green'用户控件的情况下了解主窗体)?
我以为使用'green \'用户控件作为参数从\'orange \'用户控件触发事件到主窗体,然后以主窗体处理接线。
2)是否有“地方”来处理此接线?
3)如果所有“绿色”用户控件都需要相互关联(例如,如果其中一个值发生变化,则所有其他用户控件都需要通知),最好的方法是什么?我考虑过要创建一个单例类EventManager来处理此问题?
我真的很努力地将松散耦合的用户控件与它们的连线结合在一起。
希望我的问题清楚。
提前致谢,
凯文
解决方法
我就是这样考虑的,任何控件/类都应负责配置自身及其直接子级的公共接口。类或控件的用户不需要其父级或子级的任何内部知识。
因此,在您的示例中,橙色控件应订阅绿色控件事件并采取相应的行动,方法是向父级提出自己的事件,或者对同级绿色控件进行某些操作。当添加绿色控件并将其从橙色控件中删除时,橙色控件负责维护其内部的“接线”。无论主机是通过公用方法还是私有方法在橙色主机上执行此操作,这都是正确的橙色上一些公开的集合,这样做的逻辑必须封装在橙色中。
无论我们考虑橙色,宿主,绿色还是任何其他类/控件,此声明同样正确。
在编码方面,添加和删除控件时,您将要在Multicast Delegate \\ Event订阅者模型中使用
+=
和-=
。处理程序将被适当地编码。