簡體   English   中英

如何從任務欄最小化表單?

[英]How to minimize form from taskbar?

我開發了 winform 應用程序,並設置了 formborderstyle=none。 這就是為什么當我運行應用程序時,我無法通過任務欄將其最小化。 有沒有人知道解決方案?

我嘗試了以下代碼.. 在我的表單中添加它。

    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;
        }
    }

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

有沒有人知道這個問題的解決方案......或者有沒有其他人有其他可行的解決方案?

無邊界表單應始終是用戶不希望最小化的表單。 可發現性原則在這里開始適用:大多數用戶不知道您可以通過單擊任務欄圖標來最小化窗口。 他們希望能夠通過單擊大紅色x旁邊的按鈕來完成此操作。

正確的解決方案是為表單選擇不同的邊框樣式,其中包括標題欄和最小化框。 Windows 將自動按預期運行。 當您遵循平台的標准約定時,事情會容易得多,不僅對於您作為程序員,而且對於您的用戶。 它還修復了在創建或恢復表單時令人討厭的閃爍效果,我可以在幾秒鍾內看到標准標題欄。

當然,無論如何你都不可避免地想要這樣做,所以盡管我有更好的判斷,我還是會嘗試提供一個解決方案。 第一個問題是我無法重現您描述的行為(Windows Server 2008 R2、.NET 4.0)。 將顯示的代碼准確添加到新的 WinForms 項目,並將表單的FormBorderStyle屬性設置為“無”,我無法顯示兩個窗口。 單擊任務欄圖標會導致表單最小化,再次單擊它會恢復它。

但是有一種方法可以簡化您的代碼。 並且您可能應該將要添加的樣式標志與現有樣式標志進行 OR 運算,而不是替換現有標志。 用這個替換你的代碼:

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;
    }
}

如果這不能解決您的問題(我懷疑它會解決),那么正如我懷疑的那樣,您的代碼中還有其他錯誤,您沒有向我們展示 僅僅因為您可以注釋掉幾行代碼並且您的程序按預期工作並不一定意味着問題出在這些代碼行中。 它們可以是完全正確的,但會干擾您在其他地方使用的 hack。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM