我有一个带模块/可停靠子窗体的WinForm(WeifenLuo)。在表单之间传递事件/信息的最佳做法是什么?
例如:我想要一个" SelectionChanged" SubForm1中的事件更改SubForm2中突出显示的内容。问题是,可能没有SubForm2-Tabs,一个或多个实例。
目前,如果用户请求新的SubForm实例,则会调用这样的函数:
private void toolStripMenuItemSubForm1_Click(object sender, EventArgs e)
{
SubForm1 subForm1 = new SubForm1();
subForm1.Show(dockPanelMain, DockState.Document);
}
除了dockPanelMain.Contents
之外,MainForm没有所有子表单的记录。
编辑:我知道表单如何相互交互以及事件本身如何工作。我的问题是来自SubForm1的事件可以改变不同的其他子表单,但它们可能不存在于给定的时间点,或者可能存在多个实例,我不希望通过MainForm为每个单个事件链接它。
答案 0 :(得分:3)
恕我直言,你以错误的方式采取这种方式
一位老师过去常常以这种方式向我提出这样的问题:"首席执行官并不一定知道每个为他工作的人。但是,每个工人都会知道它的CEO" (原谅措词,它(匆匆)翻译)
这也适用于您的问题:
将父实例传递给将负责保留此实例的子项,并将其归属于他们应该监听的事件。
这样,你的父班只需要照顾好事件,孩子们就会做更新自己的工作
修改强>
要在dockpanel的内容类之间工作,它基本上是一样的。
将dockpanel的Substeps
属性传递给子类。
由于它是一个集合(因此也是一个引用类型),因此子类将始终可以访问最新的版本'该系列。
您必须通过过滤此集合来获取您感兴趣的所有实例
过滤示例(我可能在最后错过了演员表):
Contents
答案 1 :(得分:0)
我建议将包含事件/委托的Event类传递给Subform构造函数。每个子表单都可以订阅在适当的时间引发的事件。