0

c# winforms で .NET 3.5 を使用しています。これで私は MDI 子タブ コントロールを使用しています。フォームを開くと正常に動作し、正常に開きます。同じフォームをもう一度開くと、開きます。これは、タブの重複を意味します。

私のコードは以下のようなものです...

private void Main_MdiChildActivate(object sender, EventArgs e)
        {
            if (this.ActiveMdiChild == null)
                tabForms.Visible = false; // If no any child form, hide tabControl
            else
            {
                this.ActiveMdiChild.WindowState = FormWindowState.Maximized; // Child form always maximized

                if (this.ActiveMdiChild.Tag == null)
                {
                    TabPage tp = new TabPage(this.ActiveMdiChild.Text);
                    tp.Tag = this.ActiveMdiChild;
                    tp.Parent = tabForms;
                    tabForms.SelectedTab = tp;

                    this.ActiveMdiChild.Tag = tp;
                    this.ActiveMdiChild.FormClosed += new FormClosedEventHandler(ActiveMdiChild_FormClosed);
                }

                if (!tabForms.Visible) tabForms.Visible = true;
            }
        }

これで、 this.ActiveMdiChild.Tag が null の値を取るたびに、新しいフォームが何度も開かれます。これは、タブ コントロール内のフォームの重複を意味します

4

3 に答える 3

0

上記のメソッドを追加して、その名前のフォームが mdi 親の子であるかどうかを確認します。

  public static bool FormExist(string formName, out Form frm)
    {
        frm = null;
        bool exist = false;

        Form[] f = yourMdiParent.ActiveForm.MdiChildren;
        foreach (Form ff in f)
        {
            if (ff.Name == formName)
            {
                frm = ff;
                exist = true;
                break;
            }
        }

        return exist;
    }

子フォームの追加にチェックを追加します。

   Form forma;
   if(FormExist("yourchildformid",out forma) && forma !=null)
   {
      forma.Focus();
      return;
   }
于 2013-06-20T11:21:52.947 に答える