2017-04-12 44 views
1

我正在開發一個Windows窗體應用程序在C#中,我有一個窗體必須以最大化狀態啓動,並且不允許用戶恢復或調整它的大小。我已經將窗體配置爲以最大化模式啓動,禁用還原並最大化按鈕並鎖定窗體的邊框,但當雙擊標題欄時,窗體將恢復爲意想不到的較小尺寸。以下是我爲達到所需行爲而設置的屬性:不允許用戶調整最大化的形式

FormBorderStyle = FixedSingle 
MaximizeBox = False 
WindowState = Maximized 

有人可以幫我解決這個問題並解釋我的解決方案嗎?

在此先感謝。

+1

只要堅持在窗體上的在onResize事件處理程序,並把它放回去。有人想知道爲什麼你盡力激怒你的用戶。 –

+0

@TonyHopkinson所以你想說的是我在事件處理程序代碼中將「WindowState」設置爲「Maximized」? 嘿,這是否令人討厭?!!!! – hecate

+0

@stuartd您是否意味着在運行時將最大化窗體的大小設置爲「MinimumSize」屬性。 – hecate

回答

7

你要記住,你的形式與一些默認的大小值開始並雙擊剛剛2個狀態之間切換。
在你的正常狀態的形式將獲取它的最後一個(在你的情況下默認值)的大小,你可以重寫:

Width = Screen.PrimaryScreen.Bounds.Width; 
Height = Screen.PrimaryScreen.Bounds.Height; 

的另一件事是,你的申請一些所謂的開始位置的(從我記得是什麼)默認在屏幕的中心,你可以用更改:

Form.StartPosition = new Point(0, 0); // top-left corner 

現在你在你的應用程序了做的是檢查窗口狀態之間切換。最簡單的方法是使用WndProc並等待在this msdn page列出的郵件:

protected override void WndProc(ref Message m) 
{ 
    const int WM_SYSCOMMAND = 0x0112; 
    const int SC_MAXIMIZE = 0xF030; 
    const int SC_RESTORE = 0xF120; 

    if (m.Msg == WM_SYSCOMMAND) 
    { 
     switch((int)m.WParam) 
     { 
      case SC_RESTORE: 
       // your window was restored (double clicked on the command bar) 
       // set it's window state back to maximize or do whatever 
       break; 

      case SC_MAXIMIZE: 
       // your window was maximized .. no actions needed, just for debugging purpose 
        break; 
     } 
    } 
    base.WndProc(ref m); 
} 
+0

這比我的回答更優雅,學到更多!道具給你 – EpicKip

+0

@ m.rogalski感謝您的幫助和努力:) – hecate

3

這可以通過捕捉該事件並覆蓋它來完成:

private void Form_Load(object sender, EventArgs e) 
{ 
    this.FormBorderStyle = FormBorderStyle.FixedSingle; 
    this.WindowState = FormWindowState.Maximized; 
    this.MaximizeBox = false; 
    this.MinimumSize = Screen.GetWorkingArea(this.Location).Size; 
} 

private const int WM_NCLBUTTONDBLCLK = 0x00A3; 
//double click on a title bar 

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_NCLBUTTONDBLCLK) 
    { 
     m.Result = IntPtr.Zero; 
     return; 
    } 
    base.WndProc(ref m); 
} 
+0

感謝您的努力和幫助。這並不是說你的答案不正確,或者沒有按照預期的那樣工作,但是我正在尋找m.rogalski所寫的答案,因爲它的解釋非常詳盡。 SO必須實現一個系統來接受2個答案! :) – hecate

+0

@hecate我從他的答案中學到了東西,它絕對應該是被接受的!感謝upvote :) – EpicKip