Winforms 控件结合了 SplitContainer 和 TableLayoutPanel 的优点

Posted

技术标签:

【中文标题】Winforms 控件结合了 SplitContainer 和 TableLayoutPanel 的优点【英文标题】:Winforms control combining best of both the SplitContainer and TableLayoutPanel 【发布时间】:2015-09-15 10:28:28 【问题描述】:

使用 SplitContainer,用户可以调整控件两侧的大小。但仅限于两个部分。

使用 TableLayoutPanel,您可以拥有无​​限的行和列。不幸的是,用户无法拖动任何这些部分。

如何才能两全其美; SplitContainer 中中间栏的“可拖动性”以及 TableLayoutPanel 允许的超过 2x1 部分的能力?

如果 Winforms 不允许这样做,也许那里有商业组件?我知道我在一些非 .NET 程序中看到过这种高级控件。

【问题讨论】:

【参考方案1】:

在第一个的一半内嵌入另一个 SplitContainer。

请记住,您可以水平分割,也可以垂直分割。我相信这样可以生成很多整洁的布局。

【讨论】:

这似乎太容易了。我会试一试,然后回复你。 那很快。到目前为止,我认为我找不到任何缺点。做得很好。现在我应该把两个水平的SplitContainers放在一个垂直的里面还是把两个垂直的SplitContainers放在一个水平的里面,但这只是我的问题:) 唯一的缺点是当你有 2 条以上的分割线可以拖动时,你会很快看到。拖动其中一个拆分器只会影响该拆分容器和子容器,而不影响父拆分容器。所以你没有得到一个完美的带有拆分器的“TableLayoutPanel”,但它可以工作。【参考方案2】:

建立在@Brody's solution之上:

在嵌入另一个 SplitContainer(s) 后,@Wolf5 提到的唯一缺点是它们不会自动一起调整大小,因此您很快就会失去表格视图。一种解决方案可能是为每个适用的 SplitContainer 设置一个 SplitterMoved 事件处理程序:

private void mySplitContainer_SplitterMoved(object sender, SplitterEventArgs e) 
  mOtherySplitContainer.SplitterDistance = e.SplitX;

如果您的 SplitContainer 是水平的,请使用 e.SplitX,如果是垂直的,请使用 e.SplitY


其他问题的建议副本:Resizable table layout panel in c#

【讨论】:

以上是关于Winforms 控件结合了 SplitContainer 和 TableLayoutPanel 的优点的主要内容,如果未能解决你的问题,请参考以下文章

Winforms:啥决定了停靠是不是移动其他控件

在运行时更改 winforms 控件

找出从后台线程访问的 winforms 控件

将 Winforms 控件置于最前面

Winforms的多列组合框控件[关闭]

VS2019继承的winforms控件未编译