unable to bring mdi child form in front
我有一个 MDI 父表单,我在其中打开 MDI 子表单,但如果我再次单击,我不想重新打开它们,而不是我想专注于已经打开的特定 mdi 子表单,我通过单击我的菜单条来完成这项工作。我已经尝试了很多来成功地做到这一点,但一直都失败了。好吧,我的代码是:
这是一个方法…
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
private bool CheckMdiClientDuplicates(string WndCls)
{ Form[] mdichld = this.MdiChildren; if (this.MdiChildren.Length == 0) { return true; } foreach (Form selfm in mdichld) { string str = selfm.Name; str = str.IndexOf(WndCls).ToString(); if (str !=“-1”) { return true; } } return false; } |
我正在通过…
实现此方法
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
private void myToolStripMenuItem_Click(object sender, EventArgs e)
{ MyForm f = new MyForm();//MyForm is the form on which i am working if (CheckMdiClientDuplicates(“MyNamespace.MyForm”) == true) { f.MdiParent = this; f.Show(); } else { f.Activate(); f.BringToFront(); } } |
f 仍然是您的 new MyForm(),那么您希望 Activate 做什么呢?你需要得到你想要带到前面的实际表格和 Activate 那个。
此外,除非您打算使用它,否则您可能不想制作新的 MyForm。
- @Sandy.Net 看看你的代码。您正在使用 MyForm f = new MyForm() 创建一个新表单,然后尝试执行 f.Activate()…
- 那么在这种情况下我该怎么办先生?我应该先关闭from,然后用新实例重新打开它吗?
- @Sandy.Net 您应该在现有的 MyForm 对象上调用 Activate() ,而不是创建一个新对象。最好的解决方案可能是从 CheckMdiClientDuplicates 返回一个 MyForm,而不是一个 bool。
你应该试试这个代码:
这是当您单击一个按钮以显示您的第一个表单时:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
方法:
1
2 3 4 5 6 7 8 9 10 |
public static Form IsFormAlreadyOpen(Type FormType)
{ foreach (Form OpenForm in Application.OpenForms) { if (OpenForm.GetType() == FormType) return OpenForm; } return null; |
单击另一个表单的下一步按钮时执行相同操作。
来源:https://www.codenong.com/12214267/