2011-02-07 29 views
8

我遇到WinForms(VB.NET)的問題。WinForms錨定控件無法正確最大化

主窗口是一個MDI容器。 用戶打開一個新的子窗口:

non maximized child 1

,然後最大化,所以在窗口中正確填充客戶區。我的控制是正確固定(與IDE屬性Anchor)到窗口邊,這樣總是放大窗口很好地滿足客戶區:

maximized child 1

在這種狀態下(客戶端窗口最大化)的用戶打開一個不同或新的子窗口,但新的窗口控件不會拉伸,也就是說他們不「理解」它們應該伸展!

non stretched child 2

這是特別煩人,因爲如果用戶試圖恢復窗口,則控制被拉伸,所以他們消失(見沒有更多的列表視圖)!

restored child 2

這是一個錯誤?我該如何解決這個問題?

編輯:根據Hans Passant的評論,我創建了一個新的簡單項目,它的工作原理應該如此。所以我調查瞭解我的真實項目和樣本有什麼不同。不同的是,在我的項目中,我動態地創建了表單。

我動態地在工具欄上創建了很多按鈕。當用戶點擊一個按鈕時,這是執行的代碼:

Private Sub buttonClicked(ByVal sender As System.Object, ByVal e As System.EventArgs) 
     Cursor.Current = Cursors.WaitCursor 

     Dim b As Button = CType(sender, Button) 

     Dim assem As Assembly = Assembly.GetExecutingAssembly() 
     Dim formType As Type = assem.GetType(CStr(b.Tag)) 

     Dim exFormAsObj As Object = Nothing 
     Try 
      exFormAsObj = Activator.CreateInstance(formType) 
     Catch ex As Exception 
      Cursor.Current = Cursors.Default 
      MessageBox.Show("clicca meglio:" + ex.ToString) 
      Exit Sub 
     End Try 

     Dim f As Form = CType(exFormAsObj, Form) 
     f.MdiParent = Me 
     f.Show() 

     Cursor.Current = Cursors.Default 
    End Sub 

也就是說,表單名稱在按鈕標籤中。我創建了一個新的窗體實例,用Activator.CreateInstance(formType)然後我顯示它:f.Show()

我很確定問題出在這個動態的子表單創建中,但我無法獲得位置。

編輯2: 找到了!在我的形式共同Load事件我是做

myform.SuspendLayout() 
' various instructions 
myform.ResumeLayout(False) 

,而不是假我應該寫真:myform.ResumeLayout(True)

這麼簡單,我很抱歉。

+3

無法從屏幕截圖中猜出。將展示此行爲的小型repro項目發佈到文件共享服務。 – 2011-02-07 18:02:38

+0

請閱讀我的編輯。 「請記住MDI佈局通常不鼓勵。」 – vulkanino 2011-02-08 11:03:21

回答

3

我找到了解決方案,(感謝Cody Gray建議在此發佈我自己的答案)。

在我的形式共同Load事件我是這樣做的:的

myform.SuspendLayout() 
'' various instructions 
myform.ResumeLayout(False) 

代替False我應該寫truemyform.ResumeLayout(True)

簡單,但棘手。 謝謝大家。

1

我想你可能要達到使用

this.LayoutMdi(MdiLayout.TileHorizontal); 

或它的一個親戚是做什麼。

請記住,一般不鼓勵MDI佈局。

0

我的控制是正確固定(與IDE屬性Anchor)

也許嘗試實例化的形式,並在負載情況下以編程方式設置的屬性。

如果一個實例有效,但其他實例不可用,那意味着您需要使用調試器檢查實例形式的屬性,以確定它們的設置是否按照您期望的方式進行。

0

我在一個mdi子窗體上使用了一個datagridview,並且所有四條邊都是錨定的,只要窗體創建時不會最大化,它的大小就會正確。如果我在其他孩子被最大化時創建了表單,那麼即使您手動對錶單進行規範化和調整大小,它的大小也不正確,並且從未自行更正。我的解決方案是在表單上放置一塊麪板,並將所有四條邊固定,並將面板上的DGV放置在面板上並將其設置爲文件。我不知道爲什麼我必須這樣做,但它解決了這個問題。

相關問題