首页 文章

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

提问于
浏览
20

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

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

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

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

编辑:更清楚:用户控件添加到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将不会调整大小,但如果您通过垂直splitContainer调整大小,则它可以正常工作 .

3 回答

  • 2

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

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

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

    祝好运 .

  • 1

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

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

  • 36

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

相关问题