关于自动调整用户控件中面板的大小,我遇到了一个奇怪的问题。该面板固定在用户控件的所有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调整大小,则它可以正常工作。
答案 0 :(得分:36)
深度嵌套存在一个错误,其中内核耗尽堆栈空间导致调整大小,停靠和锚定以无提示失败。
请参阅https://web.archive.org/web/20140818095718/http://support.microsoft.com/kb/953934
答案 1 :(得分:2)
你已经谈到了“锚”和“停靠”这两个问题,它们可以起到类似的作用,但行为也不同。您的问题可能是您正在尝试同时执行这两项操作,这会干扰您所需的行为。如果没有,也许尝试从一个切换到另一个。
听起来你已经仔细检查了控件的数量,但你是否用它来检查:View-> Other Windows-> Document Outline(我最近才发现的一个非常方便的工具)?最后,虽然它没有直接解决您的问题,但听起来您的用户界面非常复杂,如果您花一些时间考虑是否可以简化用户界面,您的用户可能会受益。当然,我不了解您的用户或应用程序的用途,您所拥有的可能是最好的,但听起来可能是时候提出这个问题了。
祝你好运。答案 2 :(得分:1)
问题不在于筑巢的深度;控件可以任意嵌套。锚定和对接通常不能很好地相互配合。我通常倾向于停靠锚定,但是,无论你选择哪种解决方案,你都应该避免混合它们。