我遇到WinForms(VB.NET)的問題。WinForms錨定控件無法正確最大化
主窗口是一個MDI容器。 用戶打開一個新的子窗口:
,然後最大化,所以在窗口中正確填充客戶區。我的控制是正確固定(與IDE屬性Anchor)到窗口邊,這樣總是放大窗口很好地滿足客戶區:
在這種狀態下(客戶端窗口最大化)的用戶打開一個不同或新的子窗口,但新的窗口控件不會拉伸,也就是說他們不「理解」它們應該伸展!
這是特別煩人,因爲如果用戶試圖恢復窗口,則控制被拉伸,所以他們消失(見沒有更多的列表視圖)!
這是一個錯誤?我該如何解決這個問題?
編輯:根據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)
這麼簡單,我很抱歉。
無法從屏幕截圖中猜出。將展示此行爲的小型repro項目發佈到文件共享服務。 – 2011-02-07 18:02:38
請閱讀我的編輯。 「請記住MDI佈局通常不鼓勵。」 – vulkanino 2011-02-08 11:03:21