当我点击一个菜单时,弹出一个窗口,但我再点此菜单时,它又弹出一个一模一样的窗口,
如何控制子窗口只弹出一个实例?即如何判断此窗口的示例已经存在,如存在就直接show出来。on_menu_click()
{
         //如何判断是否存在FormUser 的实例?
FormUser formUser = new FormUser();
formUser.MdiParent = this; 
formUser.Show();
}

解决方案 »

  1.   

    VB.Net的代码,就不翻译了:  '返回当前MDI的所有子窗体是否存在名为 FormName 的目标窗体
        '如果存在 return True
        '否则 return False
        Public Function IsExistChildForm(ByVal FormName As String) As Boolean
            Me.StateInfo("正在检测目标窗口是否已打开...")
            Dim frm As Form
            For Each frm In Me.MdiChildren
                If frm.Name = FormName AndAlso (Not frm Is Nothing) Then
                    frm.Activate()
                    If frm.WindowState = FormWindowState.Minimized Then frm.WindowState = FormWindowState.Normal
                    Me.StateInfo("目标窗口:" & frm.Text & " 已经打开!")
                    Return True
                End If
            Next
            Return False
        End Function
      

  2.   

    private void ShowForm(Form oForm, bool bIsMdiChildren)
    {
    foreach(Form key in this.MdiChildren)
    {
    if(key.Name.ToUpper() == oForm.Name.ToUpper())
    {
    key.Focus();
    return;
    }
    }
    if(bIsMdiChildren)
    {
    oForm.MdiParent = this;
    }
    oForm.Show();
    }
      

  3.   

    Public Function OpenOnce(ByVal frm As Form) As Boolean
            Dim mdifrm As Form
            For Each mdifrm In Me.MdiChildren
                If frm.Text = mdifrm.Text Then
                    mdifrm.Activate()
                    Return False
                    Exit Function
                End If
            Next
            Return True
        End Function
      

  4.   

    private void menuItem19_Click(object sender, System.EventArgs e)
    {
    FrmNewBarQuery FrmNB=new FrmNewBarQuery(); if(this.IsExistChildForm(FrmNB)==false)
    {
    FrmNB.MdiParent=this;
    FrmNB.Show();
    }
    }
    /// <summary>
    /// 判断要打开的窗体是否已经是子窗体
    /// </summary>
    /// <param name="Frm">要打开的窗体</param>
    /// <returns>true:是;false:否</returns>
    private bool IsExistChildForm(Form FrmOpen)
    {
    foreach(Form mdiFrm in this.MdiChildren)
    {
    if (FrmOpen.Text == mdiFrm.Text)
    {
    FrmOpen.Activate();
    return true;
    }
    }
    return false;
    }