如果儿童表格已经打开,我该怎么办?如果还没有打开,那么打开它?
谢谢
我已经有了这个代码,显然不起作用:
Form ibx = new inbox();
if(ibx.Visible)
ibx.Dispose();
else
ibx.Show();
以上所做的就是创建一个新形式,无论它是否已经打开。
答案 0 :(得分:2)
private Form frm;
public void ToggleForm() {
if(frm == null) {
frm = new Form();
frm.Show();
}
else {
frm.Close();
frm = null;
}
}
答案 1 :(得分:2)
如果你想要实现的只是在表格尚未打开的情况下打开一个表格,那么在它出现时将它放在前面,那么以下代码可能有所帮助。
private void tsmiMenuOption_Click(object sender, EventArgs e) {
// Assuming this method is part of an MDI form.
foreach(Form child in this.MdiChildren)
if (child.Name == MyForm.Name) {
child.BringToFront();
return;
}
MyForm f = new MyForm();
f.MdiParent = this;
f.Show();
}
因此,这是未经测试的伪c#代码,用于验证MyForm是否已经打开并包含在MdiContainer.Children
中。如果是,则将此表单(MyForm
)带到前面。如果不是,那么它只是实例化并打开它。
这是关于你想要的吗?
答案 2 :(得分:1)
在主窗体中,创建第一个子窗体时,请保留对它的引用。目前,每次运行该代码时都会创建一个新的子表单,然后检查新创建的表单是否可见。
另请注意,您的主题是关于打开和关闭的,但您的代码似乎只是处理隐藏和显示。
Carra的代码是一个很好的示例,如果可以从其他任何地方关闭子窗体,请小心。
答案 3 :(得分:0)
您需要保留对ibx
的引用。您的代码每次运行时都会创建一个新的inbox
。
答案 4 :(得分:0)
Module Module1
Public Function InstanceNewForm(ByRef ParentForm As Form, ByRef Childform As Form) As Boolean
Dim bOpen As Boolean = False
Dim frm As Form
For Each frm In ParentForm.MdiChildren
If Childform.Name = frm.Name Then
Childform.Focus()
bOpen = True
Exit For
End If
Next
If Not bOpen Then
With Childform
.StartPosition = FormStartPosition.CenterScreen
.MdiParent = Parentform
.Show()
End With
End If
frm = Nothing
Return bOpen
End Function
End Module
上面的代码将检查是否已经在父容器中加载了mdi表单,如果它已经处于活动状态,则将焦点设置为它。否则它将创建mdi表单。
只需从需要加载mdi表单的任何地方调用它。例如:调用InstanceNewForm(me,form2)
每次都像魅力一样!!