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 的优点的主要内容,如果未能解决你的问题,请参考以下文章