如果已打开,请关闭子表单

时间:2010-05-25 12:26:59

标签: c# .net winforms forms

如果儿童表格已经打开,我该怎么办?如果还没有打开,那么打开它?

谢谢

我已经有了这个代码,显然不起作用:

Form ibx = new inbox();
if(ibx.Visible)
ibx.Dispose();
else
ibx.Show();

以上所做的就是创建一个新形式,无论它是否已经打开。

5 个答案:

答案 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)

每次都像魅力一样!!