【发布时间】:2011-01-11 16:43:00
【问题描述】:
关于用户控件中面板的自动调整大小,我遇到了一个奇怪的问题。此面板锚定到用户控件的所有 4 个侧面。 但锚定并不总是按应有的方式工作:
如果通过调整窗体大小来调整用户控件的大小,则右侧和底部锚点不起作用。但是,如果使用表单中的拆分器调整控件的大小,它就可以正常工作。 所有其他也受调整大小影响的控件都可以正常工作,只是这个面板不起作用。
我看不出通过拆分器和通过表单调整大小之间的区别。
在用户控件的 OnResize 中手动设置大小仅在通过移动拆分器完成调整大小时才有效。如果通过调整窗体大小来调整大小,则面板的高度和宽度不会更改为新值。
编辑:为了更清楚:将用户控件添加到 TabPage 并设置为 Dock=DockType.Fill。
Edit2:为了让它更复杂:这是控件使用的层次结构: 表单包含一个带有 2 个控件(A 和 B)的拆分器。 (B) 包含一个带有 splitContainer 的用户控件 (C)。 (C) 中的拆分容器->panel1 包含一个选项卡控件 (D)。此选项卡控件 (D) 包含一个用户控件 (E)(在选项卡页中)。此用户控件 (E) 有一个拆分容器 (F),其中放置了另一个带有 tabControl (G) 的用户控件。此选项卡控件 (G) 具有选项卡页,并且在此页面中放置了所描述的用户控件 (H)。
如果我将控件 (H) 直接放在拆分容器 (C) 中的面板上,一切正常。由于添加到 splitcontainer 或 tabpage 的所有控件都设置为 docktype=fill,我不明白为什么最后一个控件有这个问题。
Windows 窗体框架中是否有任何限制子控件数量的限制?
编辑:我上传了一个 TestApplication,您可以使用它来重现此问题。 http://rapidshare.de/files/49092516/TestApplication.zip.html 它只发生在 Vista 下。 Win XP 和 7 正常工作... 如果您调整表单大小,带有“...”按钮的文本框不会调整大小,但如果您通过垂直 splitContainer 调整大小,它会起作用。
【问题讨论】:
-
你能粘贴设计器生成的代码吗(它将所有控件链接在一起)?我的第一个猜测是,您的面板被锚定到与您想象的不同的控件(例如拆分的面板之一)
-
粘贴的代码太多了,但我不止一次检查了锚点并且设置正确(使用拆分器时调整大小可以证明这一点)