2012-03-14 68 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