2009-06-02 37 views
1

好吧,繼承人我的問題。我有一個表單,當它沒有最大化時,它的最大尺寸必須是表單內部組件的總高度。爲了達到這個目的,我使用這個:C#告訴如果窗體是最大化

private void resize_form(object sender, EventArgs e) 
    { 
     this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin); 
    } 

這引發了表單的Resize事件。因爲組件的大小總是在變化,所以在調整大小事件時這樣做是有意義的。如何,如果我想最大化窗體,窗體只是去在this.MaximumSize中定義的最高設置。所以我想知道是否有一種方法可以告訴窗體何時會最大化,並在表單最大化之前將其最大化設置爲屏幕邊界。

如果有更好的方法來更改,恕不resize事件MAXIMUMSIZE值,這也將是巨大的:)

回答

3

我找到了完美適合我的答案。阿律的WndProc控制裝置:d(我愛的WndProc現在)

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

    switch (message.Msg) 
    { 
     case WM_SYSCOMMAND: 
      int command = message.WParam.ToInt32() & 0xfff0; 
      if (command == SC_MAXIMIZE) 
      { 
       this.maximize = true; 
       this.MaximumSize = new System.Drawing.Size(0, 0); 
      } 
      break; 
    } 

    base.WndProc(ref message); 
} 

private void resize_form(object sender, EventArgs e) 
{ 
    if (!maximize) 
    { 
     this.MaximumSize = new System.Drawing.Size(1000, this.panel4.Height + this.label2.Height + this.HeightMin); 
    } 
} 

基本上它設置this.maximize爲true當它接收TEH SC_MAXIMIZE消息。如果this.maximize設置爲false,resize事件將只設置一個新的MaximumSize。漂亮的xD

6

您仍然需要使用調整大小事件,但檢查WindowState

if (this.WindowState == FormWindowState.Maximized) 
{ 
    // Do your stuff 
} 

正如yshuditelu指出的,你也可以設置你的表單的最小尺寸屬性 - 當結合明智地使用錨點值時,這意味着它永遠不會收縮太多,當它增長時,組件會移動和/或增長按要求。

+0

已經試過了。該proplem是如果我試圖編輯窗體的寬度和高度時,它最大化,沒有任何反應。即使我編輯MaximumSize屬性 – Ozzy 2009-06-02 16:43:28

+0

我認爲通過設置MaximumSize屬性,您已經有效地禁用了最大化功能。如果WindowSate最大化,請嘗試將MaximumSize設置爲(0,0)。 – ChrisF 2009-06-02 16:47:56

+0

我剛剛嘗試過,當我點擊最大化時,我的應用移到了屏幕的左上角,並保持最大尺寸。 – ChrisF 2009-06-02 16:52:30

2

您確定不想設置MinimumSize屬性嗎?如果您將MinimumSize設置爲所有標籤的大小,那麼表單將永遠不會小於此大小。但它仍然可以增長到任何規模的用戶想要的,只要它大於最小值。

0

查看System.Windows.Forms.Screen類。從相關點獲取屏幕(以處理多週期案例),然後獲得其解決方案。

這應該與關於檢查FormWindowState.Maximized的其他評論一起使用。

0

如果在上部欄中的用戶點擊,就可以調整窗口的大小,所以我用這個:

private void Form1_Resize(object sender, EventArgs e) 
{ 
    if (this.WindowState == FormWindowState.Normal) 
    { 
     this.WindowState = FormWindowState.Maximized; 
    } 
}