C#:锚定面板不会正确resize

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

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

我看不出通过分割器和表单resize之间的区别。

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

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

编辑2:使其更复杂:这是使用控件的层次结构:表单包含一个带有2个控件(A和B)的拆分器。 (B)包含带有splitContainer的用户控件(C)。 (C)中的split container-> 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将不会resize,但如果您通过垂直splitContainerresize,则它可以正常工作。

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

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

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

听起来你已经仔细检查了控件的数量,但你是否用它来检查它:查看 – >其他Windows->文档大纲(我最近才发现的一个非常方便的工具)?

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

祝好运。

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