2012-03-14 122 views
-2

我有一個窗體中有一個按鈕。如果我點擊按鈕,另一個表單打開。如果我在標籤的幫助下返回到父窗體並再次單擊相同的按鈕,它什麼也不做。選擇一個按鈕打開的標籤點擊

這裏是我的代碼:

private void pictureBox1_Click(object sender, EventArgs e) 
     { 
      form wadd = new form(this); 
      if ((IsFormAlreadyOpen(typeof(form))) == null) 
      { 
       wadd.MdiParent = Form1.ActiveForm; 
       wadd.Show(); 
      }   
     } 
public static Form IsFormAlreadyOpen(Type FormType) 
     { 
      foreach (Form OpenForm in Application.OpenForms) 
      { 
       if (OpenForm.GetType() == FormType) 
        return OpenForm; 
      } 
      return null; 
     } 



private void Form1_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 child form is new and no has tabPage, 
       // create new tabPage 
       if (this.ActiveMdiChild.Tag == null) 
       { 
        // Add a tabPage to tabControl with child 
        // form caption 
        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); 
       } 
       else 
       { 

        tab(); 
       } 

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

      } 
     } 
     public void tab() 
     { 
      for (int i = 0; i < tabForms.TabCount; i++) 
      { 
       if (tabForms.TabPages[i].Text == this.ActiveMdiChild.Text.ToString()) 
       { 
        tabForms.SelectedTab = tabForms.TabPages[i]; 
        break; 
       } 
      } 
     } 

     private void ActiveMdiChild_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      //Destroy the corresponding Tabpage when closing MDI child form 
      if (tabForms.HasChildren) 
      { 
       ((sender as Form).Tag as TabPage).Dispose(); 
      }    
      //If no Tabpage left 
      else if (!tabForms.HasChildren) 
      { 
       tabForms.Visible = false;     
      }    
     } 

     private void tabForms_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      if ((tabForms.SelectedTab != null) && (tabForms.SelectedTab.Tag != null)) 
       (tabForms.SelectedTab.Tag as Form).Select();    
     } 

     private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
     {    
      if (!tabForms.HasChildren) 
      { 
       Application.Exit(); 
      }    
     } 

我想要的結果是,當我點擊一次按鈕的標籤應該被着重於這種形式,而不是打開新的形式,這是不permissable。

+0

我看不到你在哪裏告訴窗體打開哪個標籤...我錯過了什麼? – 2012-03-14 03:14:34

+0

另外,IsFormAlreadyOpen返回什麼?順便說一句,我敢肯定,有一個更好的名稱爲該方法... – 2012-03-14 03:17:33

+0

它是爲開放的形式,如果沒有返回null – 2012-03-14 04:42:16

回答

0

我想你會想是這樣的:

public Form FormOpened<T>() 
    { 
     foreach (Form form in Application.OpenForms) 
      if (typeof(T) == form.GetType()) 
       return form; 

     return null; 
    } 

然後,您可以使用這樣的:

form f = (form)FormOpened<form>(); 
if (f2 == null) 
{ 
    f2 = new form(); 
    f2.MdiParent = this; 
    f2.Show(); 
} 
else 
{ 
    f2.Focus(); 
} 

告訴我,如果您需要任何幫助。

+0

f2.focus不與tab..i工作真正需要的其他part..if(F2!= NULL)我怎樣才能得到所需的選項卡 – 2012-03-14 04:50:35

+0

你是什麼意思......?我只是不明白你所要求的。 所以有一大堆選項卡,每個選項卡代表一個打開的窗口。當你嘗試打開一個已經有一個標籤的窗口時,它只是將選中的標籤設置爲那個標籤? – hetelek 2012-03-14 21:09:54

+0

是這是我需要.. – 2012-03-15 02:20:38

0

你想是這樣的,我相信:

form wadd; 
private void pictureBox1_Click(object sender, EventArgs e) 
    { 
     if (wadd == null) 
     { 
      wadd = new form(this); 
     } 
     wadd.MdiParent = Form1.ActiveForm; 
     wadd.Show(); 

    } 

你只需要邏輯倒退。如果沒有窗體打開,則創建並打開它。如果已經有表單,那麼就使用它。

+0

在標籤不工作.. – 2012-03-14 05:44:19

相關問題