vul*_*ino 8 .net controls 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
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)
这么简单,对不起.
我找到了解决方案(感谢科迪·格雷建议在这里发布我自己的答案)。
在我的表单中,我正在执行常见的 Load 事件:
myform.SuspendLayout()
'' various instructions
myform.ResumeLayout(False)
Run Code Online (Sandbox Code Playgroud)
而不是False我应该写true:myform.ResumeLayout(True)
简单,但很棘手。谢谢大家。
| 归档时间: |
|
| 查看次数: |
2494 次 |
| 最近记录: |