我正在编写一个 Windows 窗体应用程序,该应用程序在三个可用区域中的两个区域中使用两个嵌套的 SplitContainers 和 DataGridViews,如下图所示。我已经连接了设置和表单初始化,以允许用户禁用多窗格格式,以支持仅包含第一个 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 的完整操作区域,而不是保留其预定义的边界,因为这是我添加部件时面板拆分器所在的位置而设置的。
对于消除过程,同样的事情发生在第二个 DataGridView 放置在子 SplitContainer(即bottomSplitContainer.Panel1
)中 - 它也不服从其外壳的区域。
到目前为止,我已经对此进行了一些阅读,看起来这可能是一个锚定问题,但我对 .NET 和 Windows 窗体的经验非常有限,因此这可能需要一些手持或指向出明显的错误。
另外,如果你们都需要更多实际的代码参考,我很乐意应要求发布表单类。