我有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)
简单但棘手。
谢谢大家

10-08 08:51
查看更多