WinForms锚定控件无法正确最大化

vul*_*ino 8 .net controls winforms

我有WinForms(VB.NET)的问题.

主窗口是MDI容器.用户打开一个新的子窗口:

非最大化的孩子1

然后最大化它,因此窗口正确填充客户区.我的控件已正确锚定(使用IDE属性Anchor)到窗口两侧,以便扩大窗口总是很好地填充客户区:

最大化的孩子1

在这种状态下(客户端窗口最大化),用户打开一个不同的或新的子窗口,但新的窗口控件没有拉伸,即他们不"理解"他们应该拉伸!

非伸展的孩子2

这特别令人讨厌,因为如果用户试图恢复窗口,那么控件就会被拉伸,所以它们会消失(看不到列表视图了)!

恢复孩子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
Run Code Online (Sandbox Code Playgroud)

也就是说,表单名称位于按钮标记中.我创建了一个新的表单实例,Activator.CreateInstance(formType)然后我展示它:f.Show().

我很确定问题出在这个动态的子表单创建中,但我无法得到它.

edit2:找到了!在我的形式常见的Load事件我正在做

myform.SuspendLayout()
' various instructions
myform.ResumeLayout(False)
Run Code Online (Sandbox Code Playgroud)

而不是假,我应该写成: myform.ResumeLayout(True)

这么简单,对不起.

vul*_*ino 3

我找到了解决方案(感谢科迪·格雷建议在这里发布我自己的答案)。

在我的表单中,我正在执行常见的 Load 事件:

myform.SuspendLayout()
'' various instructions
myform.ResumeLayout(False)
Run Code Online (Sandbox Code Playgroud)

而不是False我应该写truemyform.ResumeLayout(True)

简单,但很棘手。谢谢大家。