【发布时间】:2016-10-17 15:30:22
【问题描述】:
我正在编写一个 Windows 窗体应用程序,该应用程序在三个可用区域中的两个区域中使用两个嵌套的 SplitContainer 和 DataGridView,如下图所示。我已经连接了设置和表单初始化,以允许用户禁用多窗格格式,以支持仅包含第一个 DataGridView 的单窗格视图。
这里的主要问题(正如我将在(希望)足够的深度中解释的那样)是,如果其他面板被隐藏,DataGridViews 不遵守 SplitContainer 面板的约束。
这里,红色轮廓表示父SplitContainer,在引用中适当地称为masterSplitContainer。蓝色轮廓表示子SplitContainer,标题为bottomSplitContainer,占据masterSplitContainer.Panel2 的位置。
DataGridViews 占据了masterSplitContainer.Panel1 和bottomSplitContainer.Panel1 区域,到目前为止我已经设计了初始化代码,以便程序考虑三种可能性:
- 用户想要单窗格视图/UI布局,从而使
masterSplitContainer.Panel1占据masterSplitContainer的整个区域。 - 用户启用了双窗格布局,但删除了底部容器的 Panel 2。
- 用户想要所有三个面板。
正如我仅使用 SplitContainers 构建的测试表明的那样,第二个 SplitContainer(孩子)达到了预期的目的,并且对这种安排非常满意,没有任何障碍。但是,当测试启用单窗格视图的设置时,结果如下:
masterSplitContainer.Panel2 被以下代码禁用:
masterSplitContainer.Panel2Collapsed = true;
masterSplitContainer.Panel2.Hide();
在这种情况下,我希望 DataGridView 承担 masterSplitContainer 的完整操作区域,而不是保留其预定义的边界,因为这是我添加部件时面板拆分器所在的位置而设置的。
对于消除过程,放置在子 SplitContainer(即bottomSplitContainer.Panel1)中的第二个 DataGridView 也会发生同样的事情 - 它也不服从其封闭区域。
到目前为止,我已经对此进行了一些阅读,看起来这可能是一个锚定问题,但我对 .NET 和 Windows 窗体的经验非常有限,所以这可能需要一点点手-持有或指出明显的错误。
另外,如果你们都需要更多实际的代码参考,我很乐意应要求发布表单类。
【问题讨论】:
-
DGVs Dock=Fill 吗?嵌套的 SpliContainer Dock=Fill 吗?
-
@TaW 进行这两项更改会导致元素按预期执行。
-
制作一个控制线很简单。提示:通过添加一个或多个固定拆分容器来完成多个相同的操作..
标签: c# .net winforms datagridview splitcontainer