2012-01-23 65 views
3

我想知道有沒有辦法在我的自定義對話框的左上角有圖標,而控制框,最小化框和最大化框被禁用?當點擊圖標(關於,關閉,移動等)時,我不需要任何功能。我只是想要更好看。沒有控制盒的Windows窗體對話框圖標

+1

沒有控制盒子 - >無圖標 – Mikant

+0

你對此有多確定?沒有任何選擇嗎? – Vajda

+0

@Mikant,你可以發表一個答案,以便我可以選擇你的答案是正確的。 – Vajda

回答

3

沒有控制箱=>無圖標...

當控制盒被禁用,形式windowstyle WS_SYSMENU標誌(不知在遠地)下降,因此它成爲不可能的Windows顯示一個圖標。其實我還沒有找到爲什麼(&如何)的右上角的圖標繼續存在W/O WS_SYSMENU最終解釋權......卻發現多了一個很好的解決方案適合您的需要)

private const int GWL_STYLE = -16; 
    private const int WS_CLIPSIBLINGS = 1 << 26; 

    [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "SetWindowLong")] 
    public static extern IntPtr SetWindowLongPtr32(HandleRef hWnd, int nIndex, HandleRef dwNewLong); 
    [DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "GetWindowLong")] 
    public static extern IntPtr GetWindowLong32(HandleRef hWnd, int nIndex); 

    protected override void OnLoad(EventArgs e) { 
     int style = (int)((long)GetWindowLong32(new HandleRef(this, this.Handle), GWL_STYLE)); 
     SetWindowLongPtr32(new HandleRef(this, this.Handle), GWL_STYLE, new HandleRef(null, (IntPtr)(style & ~WS_CLIPSIBLINGS))); 

     base.OnLoad(e); 
    } 
+0

我無法使用您提供的這段代碼。因爲所有這些都是用戶期望的正常情況,所以我只用關閉按鈕來使用控制盒。 – Vajda

+0

似乎不起作用。可以工作的是禁用或刪除系統菜單中的SC_CLOSE項目。禁用的關閉框仍然可見,但不可點擊。見http://www.codeguru.com/csharp/csharp/cs_misc/userinterface/article.php/c9327/Manipulating-the-System-Menu-Using-C.htm – dlchambers

2

您可以將ControlBox屬性設置爲false。 Control Box,最大化,最小化按鈕不會顯示在對話框中。

Form1.ControlBox = false; 

否則 你可以這樣設置,如果你不願意禁用整個控制箱。您可以將ShowIcon屬性設置爲true。

Form1.MaximizeBox = false; 
Form1.MinimizeBox = false; 
Form1.ShowIcon=true; 
+0

是的,我知道,但在這種情況下,左上角的圖標不再可見。 – Vajda

+0

@Vajdacheck更新ans –

+0

看來,只有當控制框啓用時,圖標纔可見。 – Vajda

-1

您可以隨時在左上角添加一個圖像控件並將圖標指定給它。這會有幫助嗎?

+0

不可以,只能在客戶區域添加圖片,而不是在需要的地方添加圖片。 – Vajda

相關問題