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

C# Windows窗体:在运行时添加的控件之间连接自定义事件,c#,winforms,events,user-interface,C#,Winforms,Events,User Interface,如果我有以下表格: 表单有多个usercontrols(橙色),其中还包含多个usercontrols(绿色) 我的问题是: 1) 如果我在其中一个“橙色”用户控件中添加一个额外的“绿色”用户控件,那么将这个新的“绿色”用户控件连接到主窗体上按钮事件的最佳方式是什么(而“橙色”或“绿色”用户控件不知道主窗体)? 我想用“green”usercontrol作为参数从“orange”usercontrol向主窗体触发一个事件,然后在主窗体中处理连接。 2) 是否有更好的“位置”来处理此接线? 3

如果我有以下表格:

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

我的问题是:
1) 如果我在其中一个“橙色”用户控件中添加一个额外的“绿色”用户控件,那么将这个新的“绿色”用户控件连接到主窗体上按钮事件的最佳方式是什么(而“橙色”或“绿色”用户控件不知道主窗体)?
我想用“green”usercontrol作为参数从“orange”usercontrol向主窗体触发一个事件,然后在主窗体中处理连接。

2) 是否有更好的“位置”来处理此接线?

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

我真的很难将松散耦合的用户控件结合起来,并将它们连接起来

我希望我的问题是清楚的

提前感谢,,
Kevin

我就是这么想的,任何控件/类都应该负责配置自身及其直接子级的公共接口。类或控件的用户不需要了解它的父级或子级的任何内部知识

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

这句话同样是真实的,不管我们考虑橙色、宿主、绿色或任何其他类/控制。< /P>
在编码方面,当添加和删除控件时,您需要将
+=
-=
与Multicast Delegate\Event subcriber模型一起使用。将对处理程序进行适当编码。

AVG告诉我imageshack链接中有错误。我肯定这不是你的错,但是伙计,小心点。误报?如果我理解得很好,我应该在green和orange usercontrols中创建一个事件ValueChanged,让主窗体订阅orange的ValueChanged事件,让orange订阅green的ValueChanged事件。
一旦green中的值发生变化,orange将收到通知,然后可以将其ValueChanged事件提升到主窗体?