从底部调整大小时防止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窗体元素离开视图?的主要内容,如果未能解决你的问题,请参考以下文章