【发布时间】:2016-05-09 20:51:12
【问题描述】:
我有一个带有模块化/可停靠子表单的 WinForm (WeifenLuo)。在表单之间传递事件/信息的最佳做法是什么?
例如:我希望 SubForm1 中的“SelectionChanged”事件更改 SubForm2 中突出显示的内容。问题是,可能有零个 SubForm2-Tab,一个或多个实例。
目前,如果用户请求一个新的 SubForm 实例,则会调用这样的函数:
private void toolStripMenuItemSubForm1_Click(object sender, EventArgs e)
{
SubForm1 subForm1 = new SubForm1();
subForm1.Show(dockPanelMain, DockState.Document);
}
主窗体没有记录除dockPanelMain.Contents之外的所有子窗体。
编辑:我知道表单如何相互交互以及事件本身如何工作。我的问题是来自 SubForm1 的事件可以改变不同的其他 SubForms,但它们可能在给定的时间点不存在,或者可能有多个实例,我不想通过 MainForm 为每个事件链接它。
【问题讨论】:
-
添加一个事件并发起它。某人(另一种形式)可以订阅/取消订阅它并做一些事情。
-
这实在是太宽泛了......但这是我的两分钱,全球活动中心怎么样?如果您在创建一个必须接收事件的表单时拥有一个全局集线器,请订阅它,然后必须触发该事件的表单调用集线器来提升它。干净简单。
-
全球活动中心是我的第一个想法,但起初它似乎有点复杂和臃肿,但到目前为止我唯一的解决方案。
-
@RenéVogt 一开始我也以为是,不过这个问题不一样,不是亲子关系,而是子子不相识的子跨度>