2010-04-15 71 views
0

是否有一种简单的方式来跟踪Mdi儿童的变化,即当他们被创建和关闭时,像事件OnMdiChildListChanged(我意识到这实际上并不存在)。Mdi儿童在.Net中改变

我也知道我可以在我的Mdi中有一个方法来处理子窗体的创建并记录它们的状态,甚至创建一个接口来定义子窗体具有一个“NotifyParent”方法,然后呼吁关闭的形式,但我想知道是否有任何内置的事件,我可以进入?

+0

@Jon,我不觉得这是一个好主意,说出我想解决什么问题,因为它应该不重要 - 这只会鼓励人们回答这个问题(我已经有了)。如果对我的问题有一个答案(可能是一个简单的事件),它会解决许多问题。无论如何,谢谢你,但你的链接并没有解决我的问题。谢谢。 – Ben 2010-04-15 13:46:07

回答

1

此管道已存在,它用于自动更新MDI窗口列表(MenuStrip.MdiWindowListItem属性)。 Form类在OnVisibleChanged和OnMdiChildActivate方法中有代码来更新菜单。尽管如此,你不能看到菜单项目列表的变化,你也不能重写任何管道代码。在您自己的子表单中执行类似和重载这些方法不是没有办法。

蓬特这个问题,简单地写在你的MDI父窗体的公共方法,你坚持使用添加新的子窗口:

public void AddChild(Form child) { 
    child.MdiParent = this; 
    child.FormClosed += child_FormClosed; 
    // Run your code to handle new child windows here... 
} 
private void child_FormClosed(object sender, FormClosedEventArgs e) { 
    // Your code to handle closed child windows here... 
} 

你甚至可以做的AddChild静态的,因为有永远只能一个MDI父。

+0

感谢@Hans,我有一种感觉,我不得不写上面的代码。 – Ben 2010-04-15 14:55:29

0

您可以创建自己的事件,并自己在关联的方法中激发它。这非常简单,您可以像内置事件一样订阅它。

+0

嗨@SLC,是的,我也这么想过。我知道有几种方法可以自己做。我只是认为它可能是.Net给你的东西,因为它似乎相当有用。干杯 – Ben 2010-04-15 13:33:20

0

当Mdi孩子被打开或关闭时,MdiChildActivate(或OnMdiChildActivate)将会触发。