C#:锚定面板不会正确调整大小

时间:2010-02-01 11:57:24

标签: c# winforms controls

关于自动调整用户控件中面板的大小,我遇到了一个奇怪的问题。该面板固定在用户控件的所有4个侧面。 但锚定并不总是如此:

如果通过调整表单大小调整用户控件的大小,则右侧和底部锚点不起作用。但是如果通过使用表单中的拆分器来调整控件的大小,则它可以正常工作。 所有其他控件也受到调整大小正常工作的影响,只有这个面板不会这样做。

我看不出通过分割器和表单调整大小之间的区别。

仅在通过移动拆分器完成大小调整时,才能在UserControl的OnResize中手动设置大小。如果通过调整表单大小来调整大小,则面板的高度和宽度将不会更改为新值。

编辑:更清楚:用户控件添加到TabPage并设置为Dock = DockType.Fill。

Edit2:使其更复杂:这是使用控件的层次结构: 表格包含一个带有2个控件(A和B)的分割器。 (B)包含带有splitContainer的用户控件(C)。 (C)中的分离容器 - > panel1包含tabcontrol(D)。此tabcontrol(D)包含用户控件(E)(在标签页中)。该用户控件(E)具有拆分容器(F),其中放置了具有tabControl(G)的另一个用户控件。此tabcontrol(G)具有tabpages,并且在此页面中是所描述的用户控件(H)。

如果我将控件(H)直接放在拆分容器(C)中的面板上,一切正常。由于添加到splitcontainer或tabpage的所有控件都设置为docktype = fill,我无法理解为什么最后一个控件出现此问题。

Windows窗体框架中是否存在限制子控件数量的限制?

编辑:我上传了一个TestApplication,您可以使用它重现此问题。 http://rapidshare.de/files/49092516/TestApplication.zip.html 它只发生在Vista下。 Win XP和7正常工作...... 如果您调整表单大小,带有“...”按钮的textBox将不会调整大小,但如果您通过垂直splitContainer调整大小,则它可以正常工作。

3 个答案:

答案 0 :(得分:36)

深度嵌套存在一个错误,其中内核耗尽堆栈空间导致调整大小,停靠和锚定以无提示失败。

请参阅https://web.archive.org/web/20140818095718/http://support.microsoft.com/kb/953934

答案 1 :(得分:2)

你已经谈到了“锚”和“停靠”这两个问题,它们可以起到类似的作用,但行为也不同。您的问题可能是您正在尝试同时执行这两项操作,这会干扰您所需的行为。如果没有,也许尝试从一个切换到另一个。

听起来你已经仔细检查了控件的数量,但你是否用它来检查:View-> Other Windows-> Document Outline(我最近才发现的一个非常方便的工具)?

最后,虽然它没有直接解决您的问题,但听起来您的用户界面非常复杂,如果您花一些时间考虑是否可以简化用户界面,您的用户可能会受益。当然,我不了解您的用户或应用程序的用途,您所拥有的可能是最好的,但听起来可能是时候提出这个问题了。

祝你好运。

答案 2 :(得分:1)

问题不在于筑巢的深度;控件可以任意嵌套。锚定和对接通常不能很好地相互配合。我通常倾向于停靠锚定,但是,无论你选择哪种解决方案,你都应该避免混合它们。