2011-10-14 96 views
1

我有一個測試應用程序與多種形式,其中之一是一種粗糙的菜單類型。當我用按鈕選擇其他形式之一時,單擊菜單形式最小化。都好。在Form_Closing事件中標準化一個最小化的Winform

我現在想要發生的事情是,當我完成第二個表單並單擊紅色叉號時,我想要菜單從托盤打開。似乎很簡單,但我拉我的頭髮。

private void Form2_Closing(object sender,System.ComponentModel.CancelEventArgs e) 
{ 
    var menu = FormControl.MainMenu; 
    menu.WindowState = FormWindowState.Normal; 

    e.Cancel = false; 
} 

FormControl是我的課程,以確保只能打開MainMenu的一個實例。該代碼在按鈕單擊事件內工作,但我無法獲取任何形式的關閉/關閉事件觸發。

+0

所以基本上你的問題是「爲什麼我的表單關閉事件不觸發?」 ? – Reniuz

+0

好吧,如果這是問題是的。我包括了所有信息,因爲我知道的所有信息Windowstate可能無法在特定事件中使用,或者我可能會使用錯誤的事件等。 –

+1

聲音給我,你只是忘了訂閱事件。使用屬性窗口中的閃電圖標。並使用FormClosing而不是Closing,因此您知道何時關閉,因爲用戶正在註銷或關閉機器。 –

回答

1

OK,您的評論對「WINDOWSTATE不得以任何特定事件的工作」打擾我,讓我做了簡單的測試:

  1. 創建Form 1和Form
  2. 添加的按鈕,然後單擊事件到Form1
  3. 新增FormClosed事件到窗體2

卜tton1 Click事件處理程序:

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2(); 
    form2.WindowState = FormWindowState.Normal; 
    WindowState = FormWindowState.Minimized; 
    form2.Show(this);//Passing Form1 as owner 
    form2.Activate(); 
} 

窗體2 FormClosed事件處理程序:

private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    this.Owner.WindowState = FormWindowState.Normal;//change state of owner form 
} 

結果: 後程序啓動 - 打開Form1中。點擊按鈕後 - Form1最小化並彈出Form2。在關閉Form2之後 - Form1恢復到正常狀態。

簡歷: 仔細檢查您的Form2 REALY是否訂閱了FormClosed或FormClosing事件。

2
form2.FormClosing += delegate 
          { 
           var menu = FormControl.MainMenu; 
           menu.WindowState = FormWindowState.Normal; 
          }; 
form2.ShowDialog(); //Or Show() whatever you wish. 
+0

我認爲'Show',而不是'ShowDialog'(否則他將無法從菜單窗口打開(說)'form3',直到他關閉form2')。 –