从底部调整大小时防止Windows窗体元素离开视图?

Posted

技术标签:

【中文标题】从底部调整大小时防止Windows窗体元素离开视图?【英文标题】:Prevent Windows form elements from leaving view when resizing from the bottom? 【发布时间】:2017-07-11 12:54:18 【问题描述】:

我有一个如下图所示的表单。该表单仅包含一个 SplitContainer,每个面板中有两个 TreeView,再加上 TreeView 上方的标签。

这是尚未调整大小的表单图片:

每个 TreeView 都锚定在顶部和左侧,并停靠在底部。 每个标签都锚定在顶部和左侧。 SplitContainer 锚定在底部、左侧和右侧。

以上设置允许我在调整窗体大小时同样调整 TreeViews 的大小。但是,当我调整表单的高度时,标签(当然还有 TreeViews)被推出表单视图,如下图所示:

如何防止元素被推过标题栏?最好不使用 SizeChanged 事件。我已经尝试向表单添加填充,以及尝试不同的停靠/锚模式,但我无法限制这一点。

【问题讨论】:

您的 SplitContainer 也必须固定在顶部。 @LarsTech 这可以防止标签在表单上方移动,但不能防止 TreeViews。 如果树视图在拆分容器中,它们必须是停靠填充的。 【参考方案1】:

按顺序执行以下步骤:

    要么将SplitContainer 锚定到所有 4 个侧面,要么将其停靠填充。 将标签放在面板上。使它们比面板小,以确保它们真正成为面板的子控件(而不是表单)。将他们的Dock 属性设置为Top。 将TreeViews 放在面板上。重要的是,在您放置和对接标签后完成此操作!同样的事情:使它们比面板小。然后将他们的Dock 属性设置为Fill

注意:您可以停靠或锚定控件,但不能同时使用!如果Dock 不是None,则忽略Anchor 属性。锚定边缘与其锚定的一侧保持恒定距离。如果边没有锚定,则该方向上控件的大小将保持不变。如果两个对应的边(例如左和右)没有锚定,那么控件将在这个方向居中。

见:Manage WinForm controls using the Anchor and Dock properties

【讨论】:

【参考方案2】:

设置 SplitContainer.Dock = DockStyle.Fill;如果这是唯一出现在表单上的东西。

【讨论】:

这并没有阻止这个问题。我有同样的问题,标签被阻止在标题栏上方移动,但不是 TreeViews。 您的 SplitContainer 和视图...在 SplitContainer 的每一侧放置一个面板 - 并将它们停靠在顶部。根据需要调整高度,并将包含标题的标签放在这些面板上。随着面板“停靠”到顶部,您现在可以将填充树视图停靠到每个拆分容器的侧面。现在使用 SplitContainer.Dock = Fill,这应该可以工作。如果标签在 splitContainer 之外,那么是的 - 你会遇到问题 - 执行上述操作只会将标题移动到 SplitContainer 中 - 但更重要的是 - 使用面板,允许树视图正确停靠。

以上是关于从底部调整大小时防止Windows窗体元素离开视图?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 窗体控件中调整大小以及窗体调整大小

调整面板大小以适应 Windows 窗体中包含的元素

UIImageView 显示图像时如何防止 UIToolbar 调整大小?

如何防止子视图重叠标签栏?

删除最旧的项目时防止 ListView 垂直滚动

动态调整视图大小 osx