如果我有以下表格:
Screenshot here
表单有多个usercontrols(橙色),它还包含多个usercontrols(绿色)。
我的问题是:
1)如果我将一个额外的“绿色”用户控件添加到其中一个“橙色”用户控件中,那么将这个新的“绿色”用户控件连接到主窗体上的Button事件的最佳方法是什么(没有'orange'或“绿色”用户控制知道主要形式)?
我想从'orange'用户控件向主窗体发出一个事件,其中'green'usercontrol作为参数,然后处理主窗体中的布线。
2)处理此布线是否有“好处”?
3)如果所有“绿色”用户控件都需要连接到彼此的事件(例如,如果其中一个值发生变化,其他所有其他需要通知),最好的方法是什么?我想过创建一个单例类EventManager来处理这个问题吗?
我真的在努力应对松散耦合的用户控制并将它们连接起来。
我希望我的问题很明确。
提前致谢, 凯文
答案 0 :(得分:0)
这是我想到的方式,任何控件/类都应该负责配置自己和它的直接子节点的公共接口。班级或控制的使用者不应该需要任何父母的知识或其子女的任何内部知识。
因此,在您的示例中,橙色控件应订阅绿色控件事件并相应地执行操作,可能会将其自身事件提升到父级,或者可能影响兄弟绿色控件上的某些字段。当添加绿色控件并从橙色中移除时,橙色控件负责维护其内部“接线”。无论是在橙色的公共或私有方法中发生这种情况都是如此,如果主机能够通过橙色的一些公开集合来执行此操作,则执行此操作的逻辑必须封装为橙色。
这个陈述同样正确,无论我们是否考虑橙色,主机,绿色或任何其他类/控件。
在编码方面,您需要在添加和删除控件时将+=
和-=
与Multicast Delegate \ Event子编写器模型一起使用。处理程序将被适当编码。