我有WinForms(VB.NET)的问题。
主窗口是一个MDI容器。
用户打开一个新的子窗口:
然后将其最大化,以便窗口正确填充客户区。我的控件已正确地(使用IDE属性Anchor) anchor 定在窗口的两边,以便放大窗口时总是能很好地填充客户区:
在这种状态下(客户端窗口已最大化),用户将打开其他窗口或新的子窗口,但是新窗口控件不会拉伸(stretch),也就是说,他们不“理解”应该拉伸(stretch)!
这特别令人讨厌,因为如果用户尝试还原窗口,则控件将被拉伸(stretch),因此它们消失(请参见 ListView )!
这是一个错误吗?我该如何解决?
编辑:根据汉斯·帕桑特(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
即,表单名称在button标记中。我使用
Activator.CreateInstance(formType)
创建表单的新实例,然后显示它:f.Show()
。我很确定问题出在这种动态子窗体的创建中,但是我无法到达哪里。
编辑2:
成立!在表单常见的Load事件中,我正在做
myform.SuspendLayout()
' various instructions
myform.ResumeLayout(False)
我应该写成true而不是False:
myform.ResumeLayout(True)
很简单,对不起。
最佳答案
我找到了解决方案,(感谢Cody Gray建议在这里发布自己的答案)。
在表单常见的Load事件中,我正在做:
myform.SuspendLayout()
'' various instructions
myform.ResumeLayout(False)
我应该写成
False
而不是true
:myform.ResumeLayout(True)
简单但棘手。
谢谢大家