2012-07-17 56 views
1

我是C#的超級新手,這是關於它的第三個問題。C#WinForms應用程序顯示許多托盤圖標

我正在製作一個可以最小化到系統托盤的應用程序。我有兩種表格Form1Form2。什麼是迄今爲止我所做的是:

Form1,我有一個按鈕,這正顯示出Form2使用此代碼:

this.Hide(); 
Form2 form2 = new Form2(); 
form2.Show(); 

Form2有一個按鈕,這是隱藏它,使用此代碼:

this.Hide(); 

現在,我在任務欄上有托盤圖標。托盤圖標有一個ContexMenuStrip,並沒有使用此代碼名爲顯示一個選項:

Form1 form1 = new Form1(); 
form1.Show(); 

的問題是,當我點擊它,第二托盤圖標出現在任務欄上。兩個托盤圖標都有相同的菜單,並且兩個都在工作。如果我點擊顯示再次Form1的另一個窗口彈出,並有三個托盤圖標,等等....

有人能幫助我嗎?

回答

5

這是因爲你每次都在創建一個新的Form1。

Form1 form1 = new Form1(); 

你不希望創建一個新Form1的,要顯示舊的。給Form2參考你的第一個 form1(例如,稱它爲MainForm1)。然後,而不是

Form1 form1 = new Form1(); 
form1.Show(); 

你想幹什麼

theMainform1.Show(); 

所以你會:

this.Hide(); 
Form2 form2 = new Form2(); 
form2.theMainform1 = this; 
form2.Show(); 
+0

我該如何提供參考? :'(我感覺很糟糕 – 2012-07-17 19:58:50

+0

就像我展示的一樣,只需將一個屬性添加到Form2中即可,例如, //表單2的其他屬性 public Form1 theMainform1; – aquinas 2012-07-17 20:30:02

4

的問題是,你正在Form1的一個新的實例。這會創建一個全新的窗口,而不是恢復舊窗口。

Form1 form1 = new Form1(); 
    form1.Show(); 

您需要讓Form2引用Form1的原始實例。你可以做一個構造函數中自我引用,看起來就像

Form2 form2 = new Form2(this); 
1

您可以防止從窗口通過設置有在任務欄的圖標ShowInTaskbar的形式虛假通過。但是,當他們說你一遍又一遍地創建新表單時,其他答案是正確的。

爲什麼要讓兩個表單同時顯示?他們是否應該同時在屏幕上同時處於活動狀態?如果是這樣,你可以嘗試一個MDI接口。 http://en.wikipedia.org/wiki/Multiple_document_interface

它可能在WinForms中,但我認爲微軟正在從WPF中離開它們。

0

這裏萬一工作代碼,有人正在尋找它:

Form1中:

/* Hiding Form1 and showing Form2 */  
private void btnHideForm1_Click(object sender, EventArgs e) 
      { 
        Form mod = new Form2(); 
        mod.Owner = this; 
        mod.Show(); 
        this.Hide(); 
     } 

窗體2:

/* Hiding Form2 and showing Form1 */ 
private void btnHideForm2_Click(object sender, EventArgs e) 
     { 
       this.Owner.Show(); 
       this.Close(); 
     } 

感謝您的幫助傢伙! !

我愛你!

相關問題