C#:锚定面板赢得#x27;不能正确调整大小

C#:锚定面板赢得#x27;不能正确调整大小,c#,winforms,controls,C#,Winforms,Controls,关于用户控件中面板的自动调整大小,我有一个奇怪的问题。此面板锚定到用户控件的所有4个侧面。 但锚定并不总是像它应该的那样工作: 如果通过调整窗体大小来调整用户控件的大小,则右侧和底部的锚定将不起作用。但是,如果使用表单中的拆分器调整控件的大小,则它可以正常工作。 所有其他也受大小调整影响的控件都能正常工作,但此面板无法正常工作 我看不出通过拆分器调整大小和通过表单调整大小之间的区别 仅当通过移动拆分器来调整大小时,在UserControl的OnResize中手动设置大小才有效。如果通过调整窗体大

关于用户控件中面板的自动调整大小,我有一个奇怪的问题。此面板锚定到用户控件的所有4个侧面。 但锚定并不总是像它应该的那样工作:

如果通过调整窗体大小来调整用户控件的大小,则右侧和底部的锚定将不起作用。但是,如果使用表单中的拆分器调整控件的大小,则它可以正常工作。 所有其他也受大小调整影响的控件都能正常工作,但此面板无法正常工作

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

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

编辑:为了让它更清楚:用户控件被添加到选项卡页并设置为Dock=DockType.Fill

Edit2:使其更复杂:这是控件使用的层次结构: 表单包含一个带有2个控件(a和B)的拆分器。(B) 包含带有拆分容器的用户控件(C)。(C)中的拆分容器->面板1包含一个tabcontrol(D)。这个tabcontrol(D)包含一个用户控件(E)(在tabpage中)。此用户控件(E)有一个splitcontainer(F),其中放置了另一个带有tabControl(G)的usercontrol。这个tabcontrol(G)有tabpages,在这个页面中放置了描述的用户控件(H)

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

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

编辑:我上传了一个测试应用程序,你可以用它重现这个问题。 它只在Vista下发生。赢XP和7正常工作。。。
如果调整表单大小,则带有“…”按钮的文本框将不会调整大小,但如果通过垂直拆分容器调整大小,它将起作用。

您已经讨论过“锚定”和“停靠”,这两种功能可以达到类似的目的,但作用不同。你的问题可能是你试图同时做这两件事,这会干扰你想要的行为。如果没有,也许可以尝试从一个切换到另一个

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

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


祝你好运。

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

在内核耗尽堆栈空间的情况下,深嵌套存在一个错误,导致调整大小、对接和锚定会无声地失败


请参见

能否粘贴设计器生成的代码(将所有控件链接在一起)?我的第一个猜测是,您的面板锚定到的控件与您想象的不同(例如,拆分的其中一个面板),这将是太多的代码无法粘贴,但我多次检查锚定,并且锚定设置正确(使用拆分器时通过工作调整大小证明了这一点)我尝试了几种锚定和停靠的可能性,但不幸的是,这没有帮助。这似乎一定是框架中的一个bug…感谢文档大纲窗口的提示,它非常方便。但由于问题不仅发生在out应用程序中,而且也发生在简单的测试应用程序中,我无法理解为什么锚定和对接会出现问题。但我会查一查。关于UI:在测试应用程序中,它看起来很奇怪,但在实际应用程序中有动态部分,一些项目可能被隐藏。我们的客户认可它非常方便;)这就是解决办法。非常感谢你!令人惊叹的。我自己也有这个问题。谢谢。老实说,我没有找到解决这个问题的真正希望。谢谢。这是找到你的唯一方法。用了几个小时的忍者级别的谷歌搜索才找到这个。非常感谢!!!从我现在的经验来看,应用程序在Citrix上运行时,尤其是在64位Windows上运行Citrix时,似乎更容易出现此问题。8年后此错误是否仍然存在?