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

C# 从底部调整大小时,是否防止Windows窗体元素离开视图?,c#,winforms,resize,treeview,splitcontainer,C#,Winforms,Resize,Treeview,Splitcontainer,我有一个表格,如下图所示。表单只包含一个SplitContainer,每个面板中有两个TreeView,再加上TreeView上方的标签 以下是尚未调整大小的表单图片: 每个TreeView都固定在顶部和左侧,并停靠在底部。 每个标签都固定在顶部和左侧。 SplitContainer锚定在底部、左侧和右侧 上述设置允许我在调整窗体大小时同样调整TreeView的大小。但是,当我调整表单高度时,标签(当然还有TreeView)会被推出表单视图,如图所示: 如何防止元素被推过标题栏?最好不使用S

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

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

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

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


如何防止元素被推过标题栏?最好不使用SizeChanged事件。我尝试过在表单中添加填充,以及尝试不同的停靠/锚定模式,但我无法对此进行限制。

设置SplitContainer.Dock=DockStyle.Fill;如果这是表单上唯一显示的内容。

按顺序执行以下步骤:

  • SplitContainer
    锚定到所有四个侧面,或将其停靠填充
  • 将标签放置在面板上。使它们比面板小,以确保它们真正成为面板(而不是窗体)的子控件。将其
    Dock
    属性设置为
    Top
  • TreeViews
    放在面板上。重要的是,这是在您放置和停靠标签后完成的!同样的道理:使它们比面板小。然后将其
    Dock
    属性设置为
    Fill
  • 注意:您可以停靠或锚定控件,但不能同时停靠或锚定控件!如果
    Dock
    不是
    None
    ,则忽略
    Anchor
    属性。锚定边与锚定到的边保持恒定距离。如果未定位边,此方向上控件的大小将保持不变。如果两条对应的边(例如左侧和右侧)未定位,则控件将在此方向居中


    请参阅:

    您的拆分容器也必须锚定到顶部。@LarsTech这可以防止标签在表单上方移动,但无法防止TreeView。如果TreeView位于拆分容器中,则必须将其停靠。这并不能防止问题的发生。我也有同样的问题,标签被阻止在标题栏上方移动,但不是TreeView。您的拆分容器和视图。。。在SplitContainer的每一侧放置一个面板,并将其停靠在顶部。根据需要调整高度,并将包含标题的标签放置在这些面板上。面板“停靠”到顶部后,您现在可以将填充树视图停靠到每个拆分容器侧面。现在使用SplitContainer.Dock=Fill,应该可以了。如果标签在splitContainer外部,则是-您将遇到问题-执行上述操作将简单地将标题移动到splitContainer内部,但更重要的是-使用面板,允许TreeView正确停靠。