2011-03-03 53 views
4

我開發了winform應用程序,並且設置了formborderstyle = none。 Thatz爲什麼當我運行應用程序時,我無法通過任務欄將其最小化。有沒有人知道這個解決方案?如何從任務欄最小化表單?

我試過下面的代碼..在我的表單中添加它。

const int WS_CLIPCHILDREN = 0x2000000; 
    const int WS_MINIMIZEBOX = 0x20000; 
    const int WS_MAXIMIZEBOX = 0x10000; 
    const int WS_SYSMENU = 0x80000; 
    const int CS_DBLCLKS = 0x8; 
    protected override CreateParams CreateParams 
    { 
     get 
     { 
      CreateParams cp = base.CreateParams; 
      cp.Style = WS_CLIPCHILDREN | WS_MINIMIZEBOX | WS_SYSMENU; 
      cp.ClassStyle = CS_DBLCLKS; 
      return cp; 
     } 
    } 

我現在可以最小化任務欄中的應用程序。但問題是它創造了我的應用程序的兩個實例,一個是我需要的,另一個是不需要的。

有沒有人知道這個解決方案..還是有沒有人有一些其他的解決方案工作?

+1

你已經覆蓋'CreateParams'包括各種風格的標誌已經由.NET Framework暴露。絕對沒有理由必須首先使用這樣的代碼。我也不明白你的意思是「從任務欄最小化表單」。當應用程序打開時,點擊任務欄中的圖標,它會最小化。很簡單,不需要代碼。 Windows本身就支持這一點。除此之外,我可以保證你所顯示的代碼不會*創建你的應用程序的兩個實例。還有其他的錯誤,但是你沒有給我們足夠的信息。 – 2011-03-03 12:22:34

+2

事情是當你設置formborderstyle = none然後在運行時,你不能最小化應用程序從任務欄...自己嘗試.. – 2011-03-03 12:24:52

+0

,並且這兩個實例問題只是由於上面的代碼,我可以保證,因爲當我運行應用程序註釋上面的代碼,它工作正常。夥計plz幫助.. – 2011-03-03 12:26:49

回答

12

無邊界窗體應始終是用戶不希望最小化的窗體。可發現性原則開始適用於此:大多數用戶不知道您可以通過單擊其任務欄圖標來最小化窗口。他們希望能夠通過點擊大紅色x旁邊的按鈕來實現。 正確的解決方案是爲您的表單選擇不同的邊框樣式,其中包括標題欄和最小化框。 Windows將自動按預期行事。當您遵循平臺的標準慣例時,事情變得更加容易,不僅適合您作爲程序員,而且適合您的用戶。
它還修正了當創建或恢復您的形式討厭的閃爍效果,我可以看到標準標題欄幾秒鐘。

當然,無論如何你都不可避免地要這樣做,所以儘管我有更好的判斷力,我會盡力提供一個解決方案。第一個問題是我無法重現您描述的行爲(Windows Server 2008 R2,.NET 4.0)。將完全顯示的代碼添加到新的WinForms項目中,並將窗體的FormBorderStyle屬性設置爲「無」,但我無法獲得兩個窗口顯示。點擊任務欄圖標會使窗體最小化,再次單擊它可以恢復它。

但有一種方法可以簡化您的代碼。你可能應該使用現有的樣式標誌來對正在添加的樣式標誌進行或運算,而不是替換現有的標誌。這種替換代碼:

const int WS_MINIMIZEBOX = 0x20000; 
const int CS_DBLCLKS = 0x8; 
protected override CreateParams CreateParams 
{ 
    get 
    { 
     CreateParams cp = base.CreateParams; 
     cp.Style |= WS_MINIMIZEBOX; 
     cp.ClassStyle |= CS_DBLCLKS; 
     return cp; 
    } 
} 

如果不解決您的問題(我很懷疑它會),那麼我懷疑,還有別的錯誤在你的代碼,你有沒有顯示我們。只是因爲你可以註釋掉幾行代碼,並且程序按預期工作,不會必然意味着問題在於這些代碼行。他們可能是完全正確的,但會干擾您在別處使用的黑客行爲。

+0

感謝代碼灰色!你的代碼對我來說工作正常......應用程序的兩個實例沒有問題。它真的幫了我很多! – 2011-03-03 13:10:20

+0

令人驚訝的是,我本可以發佈*該解決方案仍然坐在我的Mac前面。我啓動了我的電腦,看是否可以重現您在問題中使用代碼描述的行爲。很高興聽到它解決了你的問題,但。 – 2011-03-03 13:12:01

+0

我有與網絡框架3.5和邊框=無相同的問題。我打算反映一下,但是首先決定進行網絡搜索。這很好。 – nate 2012-04-10 14:41:29

相關問題