是否有一种简单的方法来跟踪Mdi孩子的变化,即当他们被创建和关闭时,就像事件OnMdiChildListChanged(我意识到这实际上并不存在)。
我也知道我可以在我的Mdi中有一个方法来处理子表单的创建并记录它们的状态,甚至创建一个接口来定义子表单有一个“NotifyParent”方法然后被调用在表格的关闭,但我想知道是否有任何内置的事件,我可以探索?
答案 0 :(得分: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父级。
答案 1 :(得分:0)
您可以创建自己的事件,并自行在相关方法中触发它。它非常简单,您可以像内置事件一样订阅它。
答案 2 :(得分:0)
当Mdi孩子被打开或关闭时,MdiChildActivate(或OnMdiChildActivate)将被触发。