Dot-Net
WinForms 錨定控制項無法正確最大化
我對 WinForms (VB.NET) 有疑問。
主視窗是一個 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)而不是 False 我應該寫成 true:
myform.ResumeLayout(True)這麼簡單,對不起。
我找到了解決方案,(感謝 Cody Gray 建議在此處發布我自己的答案)。
在我的表單中,我正在執行常見的 Load 事件:
myform.SuspendLayout() '' various instructions myform.ResumeLayout(False)而不是
False我應該寫true:myform.ResumeLayout(True)簡單,但很棘手。謝謝大家。
我認為您可能想要實現的目標是使用
this.LayoutMdi(MdiLayout.TileHorizontal);或其親屬之一。
請記住,通常不鼓勵 MDI 佈局。



