2011-04-06 134 views
0

我想能夠顯示,隱藏或關閉一種形式內的一些其他形式。這個想法是我的程序從一個表單開始,並且有一些按鈕會顯示其他表單。也就是說,如果用戶點擊一個按鈕來引入另一個表單,此主表單應該最小化,並且每當用戶關閉另一個表單時,此表單將恢復到正常或最大化狀態。控制多種形式顯示,隱藏或關閉一種形式在C#

的代碼看起來像這樣對控制其他形式(Form1.cs中)我的主要形式有:

namespace MultipleForms 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    /* 
    * I want to make a public reference to this Form1 
    * So that when user closes Form2 That is F2 this form will be 
    * set back to normal or maximized state 
    */ 

    private void buttonStartForm2_Click(object sender, EventArgs e) 
    { 
     //Declare Form2 
     Form2 F2 = new Form2(); 

     //Show Form2 
     F2.Show(); 

     //Minimize Form1 
     this.WindowState = FormWindowState.Minimized; 

    } 
} 
} 

這是Form2.cs

namespace MultipleForms 
{ 
    public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     //FormClosed event handler 
     private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      //Closing Form2 
      this.Close(); 

      //Now I need a code to make Form1 to recover from minimized 
      // state to normal or maximized state. how do I should refer to it? 
     } 
    } 
} 

我想我必須做一些表單關閉事件的東西,但我怎麼能初始化Form1.cs作爲公共的東西?或者我也應該在Form2.cs中初始化Form1.cs?

namespace MultipleForms 
{ 
static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
} 
} 

PS:這是crtitical該窗體2應該被關閉,沒有牆根

UPDATE

使用漢斯的解決方案,它是或者它應該通過Program.cs的文件來實現最好使用這樣說:

private bool isEnabledCmpFrm = false; 

    public void buttonStartComparisonForm_Click(object sender, EventArgs e) 
    { 

     if (!isEnabledCmpFrm) 
     { 
      ComparisonForm CmpFrm = new ComparisonForm(); 
      CmpFrm.Show(); 
      CmpFrm.WindowState = FormWindowState.Normal; 
      this.WindowState = FormWindowState.Minimized; 

      isEnabledCmpFrm = true; 

      CmpFrm.FormClosed += delegate 
      { 
       this.WindowState = FormWindowState.Normal; 
       isEnabledCmpFrm = false; 
      }; 
     } 
    } 

回答

1

沒有窗體傾聽自己的事件。該代碼需要在Form1中進行。就像這樣:

 Form2 F2 = new Form2(); 
     F2.FormClosed += delegate { this.WindowState = FormWindowState.Normal; }; 
     F2.Show(); 
     this.WindowState = FormWindowState.Minimized; 
+0

感謝這很好,但每次我點擊按鈕選擇一個窗體來顯示,它會運行該窗體(窗體的同一個實例,但具有不同的窗口)。我怎樣才能將它限制爲1格式?除非已打開的表單已關閉,因此應再次創建新的表單實例。 – 2011-04-07 08:29:00

+0

開始一個新問題。 – 2011-04-07 11:16:03

2

如果我理解正確的話,你可以連接到窗體Closing事件。

因此,在您的主要形式,你可以這樣做:

Form2 form2 = new Form2(); 
form2.Show(); 
form2.FormClosing += new FormClosingEventHandler(form2_FormClosing); 


    void form2_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     this.Show(); 
    } 
+0

忽略我的答案,這一個更有意義。主窗體的狀態邏輯保持主窗體。 – digitlworld 2011-04-06 21:08:05

+0

@Digitlworld然後考慮刪除你的答案。 – 2015-12-18 07:06:29

0

您需要時再次傳遞引用到主窗體的子窗體使用主窗體的顯示方法以使其可見孩子的形式正在關閉。