2012-12-21 88 views
0

我有一個窗體,其佈局控件分爲左,中,右三部分。默認情況下,隱藏正確的佈局控制項(其中有幾個網格)。窗體中有一個按鈕,將窗體向右擴展以顯示兩個網格。當您再次單擊該按鈕時,它會隱藏右側的佈局控制項並再次更改窗體的大小。基本功能工作正常,但我也想在用戶按下按鈕時更新MinimumSize(所以當表單展開時,應該增加最小寬度)。這是我當前的代碼:窗體的MinimumSize不能正確更新

private void btnExpand_Click(object sender, EventArgs e) 
    { 
     this.SuspendLayout(); 
     switch (lciRight.Visibility) 
     { 
      case LayoutVisibility.Never: 
       LoadGrids(); 
       lciRight.Visibility = LayoutVisibility.Always; 
       this.Width += lciRight.Width; 
       this.MinimumSize = new Size(this.Width, this.MinimumSize.Height); 
       btnExpand.Text = "<<"; 
       break; 
      case LayoutVisibility.Always: 
       lciRight.Visibility = LayoutVisibility.Never; 
       this.MinimumSize = new Size(689, this.MinimumSize.Height); 
       this.Width -= lciRight.Width; 
       btnExpand.Text = ">>"; 
       break; 
      default: 
       break; 
     } 
     this.ResumeLayout(); 
    } 

我遇到的問題是,當窗體已經展開,我們按一下按鈕,使其原來的尺寸同樣,

這一點。 MinimumSize = new Size(689,this.MinimumSize.Height);

行沒有正確更新MinimumSize。任何想法爲什麼?

+0

究竟什麼'錯了行? – Nogard

+0

這只是沒有做任何事情。此時,this.MinimumSize.Width是1100,並且在執行該行之後,它仍然保持在1100而不是更改爲689(這是窗體的原始寬度)。 – Antrim

+1

由於'SuspendLayout()'這是正常的。試着在執行該行後檢查這個屬性:'this.ResumeLayout();'如果它沒有改變,那麼你可能已經在別的地方重寫了這個屬性 – Nogard

回答

2

這是非常簡單的功能。

請考慮您應該執行以下行後檢查更改此屬性(以及其他相關版面):

this.ResumeLayout(); 

原因是 - SuspendLayout()暫停所有的變化來控制佈局,以提高性能你的申請。

如果屬性仍hasn`t改變了你最有可能它覆蓋(設置寬度1100)在別處