添加或删除使用子表单检测的MDI表单
是否有可以用来判断是否已从MDI父级添加或删除子表单的事件?
不,那里没有。 您必须子类化Form并公开指示何时添加子项的特定事件,然后通过将子表单连接起来的方法路由子表单的所有附件,以及引发事件。
是。 在主MDI表单上,连接到MdiChildActivated事件。
像这样:
public partial class Form1 : Form { public Form1() { InitializeComponent(); this.MdiChildActivate += new EventHandler(Form1_MdiChildActivate); } void Form1_MdiChildActivate(object sender, EventArgs e) { MessageBox.Show("Activated"); } private void addToolStripMenuItem_Click(object sender, EventArgs e) { Form form2 = new Form2(); form2.MdiParent = this; form2.Show(); } }
当子表单被激活或停用时,该事件将触发。
连接MdiChildActivate
事件并保留已识别的子项列表。 激活新表单时,还会连接FormClosed
事件。
private List
我意识到这已经太晚了,但是因为这里的答案帮助我解决了这个问题,但是我会提到使用.net 4中的MdiChildren数组工作正常。你唯一需要做的就是检查表单是处理还是处理告诉它是否结束。
即:
private void frmContainer_MdiChildActivate(object sender, EventArgs e) { tabWindows.RefreshLayout(this.MdiChildren.ToList()); } public void RefreshLayout(List
是的,您可以轻松检测MDI表单中添加的表单。
通过将IsMdiContainer设置为true将ParentForm标记为MdiContainer时 ,会引发ParentForm.ControlAdded事件以将“MdiClient”控件添加到父窗体。 因此,当将MdiClient添加到父MDI表单时, 我们可以为MdiClient控件引发ControlAdded事件,如下所示,
public ParentForm() { InitializeComponent(); this.ControlAdded += Form1_ControlAdded; this.IsMdiContainer = true;
我们需要像下面一样提高MdiClient.ControlAdded,
void Form1_ControlAdded(object sender, ControlEventArgs e) { if(e.Control is MdiClient) e.Control.ControlAdded += MdiClient_ControlAdded; }
默认情况下, MDI子窗体将以父窗体的forms添加到MdiClient的控件集合中 。 因此,当将ChildForm.MdiParent值设置为Parent表单时, MdiClient的ControlAdded事件将引发 。
void MdiClient_ControlAdded(object sender, ControlEventArgs e) { }
因此,通过使用上述方法,您可以知道添加到父MDI表单中的子MDI表单 。 像这样,您可以为MdiClient控件添加ControlRemoved事件,以了解从MDI表单中删除的子表单。
希望这会帮助你。
private void closeToolStripMenuItem1_Click(object sender, EventArgs e) { List
由于MdiChildActivate事件在MDI子窗体实际关闭之前被触发,因此没有足够的信息来检测MDI子窗体是否实际被激活或关闭,我选择了不同的方法来解决问题。
我发现ParentChanged事件在MDI子窗体关闭时触发。
public class MdiParentForm : Form { // ... private Form CreateMdiChildForm() { var form = new MdiChildForm form.ParentChanged += MdiFormParentChangedHandler; form.MdiParent = this; return form; } private void MdiFormParentChangedHandler(object sender, EventArgs args) { var form = sender as Form; if (form != null) { if (form.MdiParent != null) { // MDI child form will activate // ... your code here } else { // MDI child form will close form.ParentChanged -= MdiFormParentChangedHandler; // ... your code here } } } // ... }
我最近想确定什么时候没有MDIchildren打开所以我可以显示一个面板上有很多“要做的事情”按钮只有当没有打开子窗体时。 (只是探索一个设计理念)。
我的最终解决方案非常简单 – 在父表单中添加一个计时器,并在MdiChildActivate事件确定有1个子表单打开时启动计时器。
上述就是C#学习教程:添加或删除使用子表单检测的MDI表单分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
private void MyForm_MdiChildActivate(object sender, EventArgs e) { this.panel_Tools.Visible = false; if (this.MdiChildren.Count() == 1) { this.timer_WindowsCounter.Start(); } else { this.timer_WindowsCounter.Stop(); } } private void timer_WindowsCounter_Tick(object sender, EventArgs e) { if (this.MdiChildren.Count() == 0) { this.panel_Tools.Visible = true; this.timer_WindowsCounter.Stop(); } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/984624.html