2014-11-01 30 views
0

在該頁面中的某處,我讀了以「覆蓋」最小化方法的最佳方法是使用onResize()事件。 我已經做到了,它的工作原理!我已經編碼,當窗體最小化時,它不會顯示,並在Windows托盤中放置一個圖標。至於一切工作正常,但我也編程(或至少嘗試過),當點擊窗口托盤中的圖標時,窗體再次變爲可見,但它不起作用,我不知道爲什麼。我試過編碼兩個事件(單擊和MouseClick),但代碼是相同的兩個,它仍然無法正常工作,所以我一定是做錯了什麼,但obviusly我不知道是什麼。如何使一個形式通過點擊在其Windows托盤圖標可見

請記住,我要的是在Windows托盤圖標代碼click事件,而不是在任務欄的圖標,所以也許這就是爲什麼它不工作,也許是另一個事件。

這裏是我的代碼:

private void onResize(object sender, EventArgs e) 
    { 
     this.ShowInTaskbar = false; 
     notifyIcon1.Visible = true; 
     this.Visible = false; 
    } 

    private void notifyIcon_MouseClick(object sender, MouseEventArgs e) 
    { 
     this.ShowInTaskbar = true; 
     this.Visible = true; 
    } 

    private void notifyIcon_Click(object sender, EventArgs e) 
    { 
     this.ShowInTaskbar = true; 
     this.Visible = true; 
    } 

感謝。

編輯︰問題是,我只是將圖像分配給像notifyIcon1.Icon = new Icon("greenCircle.ico");的窗體構造函數上的圖標,但我沒有初始化notifyIcon屬性上的任何圖像...通過初始化notifyIcon屬性上的圖像它工作正常!

回答

1

你可能不想隱瞞,當他們調整它的大小,只是當他們減少窗體:

private void onResize(object sender, EventArgs e) 
{ 
    if (WindowState == FormWindowState.Minimized) // only hide if minimizing the form 
    { 
     this.ShowInTaskbar = false; 
     notifyIcon1.Visible = true; 
     this.Visible = false; 
    } 
} 

要再次顯示最小化形式,你需要將其還原:

private void notifyIcon_MouseClick(object sender, MouseEventArgs e) 
{ 
    this.ShowInTaskbar = true; 
    this.Visible = true; 

    WindowState = FormWindowState.Normal; 
} 
+0

我做到了,但它仍然無法正常工作:( – Drumnbass 2014-11-01 19:47:37

+0

我測試了它和它的作品。但你說這是行爲和以前一樣嗎?你可以將其隱藏,但隨後它從來沒有回來?你確定你設置窗口狀態回到「正常」? – 2014-11-01 19:49:37

+0

對,它再也不會回來了,我是這麼說的,因爲你說的是​​「FormWindowState.Normal」,但爲了以防萬一,我把「這個。WindowState「,但沒有任何變化 – Drumnbass 2014-11-01 19:54:18

1
this.ShowInTaskbar = true; 
    this.Visible = true; 

這不符合你希望的。 Windows中一個棘手的問題困擾着許多程序員。 ShowInTaskbar屬性是「特殊的」,非常不可能的大多數其他表單屬性。它在底層CreateWindowEx()winapi函數中被指定爲樣式位。還有其他一些屬性,比如FormBorderStyle,ControlBox,LeftToRight。每個對應一個樣式位。

麻煩的是,改變屬性要求的WinForms進行相當大的體操,它具有破壞原生窗口,然後再重新創建它。這往往有副作用,你找到了一個。

交換這兩個語句,你會發現它的工作方式非常不同,現在它確實設法使窗口再次可見。但仍然不順利,它並不總是能夠進入前臺。

您可能會對看起來像一個巨大的錯誤感到困惑。真正的問題是,你正在做大多數其他程序員從未做過的事情,總是一個解決別人問題的好方法。你根本不必改變ShowInTaskbar屬性。當您隱藏窗口時,任務欄按鈕已經自動隱藏,根本不需要任何幫助。

刪除程序中的所有ShowInTaskbar分配以解決您的問題。

相關問題