2013-07-31 18 views
1

我希望我的Windows窗體形成,以保持窗口邊框,而沒有標題欄,並且是不調整大小(固定)(類似於窗口預覽,當一個人在任務欄上懸停鼠標按鈕):如何保持邊境一個固定的形式?

enter image description here

設置爲ControlBoxfalseText""刪除標題欄並保持邊框,因爲我想,但只有當窗體是可觀的時,邊框纔可見。當我設置了FormBorderStyle到的Fixed*樣式之一,邊界消失:

enter image description here

我怎麼可能實現所描述的行爲?

+0

對於我請稍候對話框中,我只是把我的周圍的形式(隱藏控件)停靠面板和所使用的面板邊框 – Sayse

+0

「固定」是不是爲FormBorderStyle屬性的有效設置。更好地記錄你的問題。包括至少包括正在運行的窗口的截屏,Windows版本和他們的方式,你希望它看起來的一個鏡頭。 –

+0

@HansPassant人,誰回答我的問題似乎明白了什麼完美的我問。不過,我包括了屏幕截圖。 – Spook

回答

1

你可以的PInvoke SetWindowsLong和調整window styles

// run in LINQpad 
private const int GWL_STYLE = -16; 
private const int WS_SIZEBOX = 0x040000; 
[DllImport("user32.dll", SetLastError = true)] 
private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 
[DllImport("user32.dll")] 
private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 
void Main() 
{ 
    var form = new Form(); 
    form.ControlBox = false; 
    form.FormBorderStyle = FormBorderStyle.FixedDialog; 
    form.Show(); 
    SetWindowLong(form.Handle, GWL_STYLE, GetWindowLong(form.Handle, GWL_STYLE) | WS_SIZEBOX); 
} 

之後,你將不得不手動prevent resizing不過。

+0

現在他有兩個問題,這些聲明是錯誤的64位代碼。重寫CreateParams屬性是正確的方法。 –

0

我剛剛玩過我的一個項目,並通過設計視圖將FormBorderStyle設置爲FixedSingle,並且窗口似乎保留了Windows 8的邊框。我最初在標題中有文本,它強制邊框呈現。我刪除了文本和邊界不再呈現,所以作爲一個哈克解決方案,我只是輸入一個空字符串,通過敲擊退格幾次。這使得邊界顯示並保持固定。

相關問題