我正在编写一个Windows窗体应用程序,该应用程序在三个可用区域中的两个区域中使用两个嵌套的带有DataGridViews的SplitContainer,如下图所示。我已经连接了设置和表单初始化,以允许用户禁用多窗格格式,而不是仅包含第一个DataGridView的单窗格视图。
这里的主要问题(我将在(希望)足够深入地解释)是,如果其他面板被隐藏,DataGridViews不会遵守SplitContainer面板的约束。
此处,红色轮廓表示父级SplitContainer,在引用中适当地称为masterSplitContainer
。蓝色轮廓表示名为bottomSplitContainer
的子SplitContainer占据masterSplitContainer.Panel2
位置。
DataGridViews占据masterSplitContainer.Panel1
和bottomSplitContainer.Panel1
区域,到目前为止我设计了初始化代码,以便该程序有三种可能性:
masterSplitContainer.Panel1
占据masterSplitContainer
的整个区域。由于我的测试版本只有SplitContainers似乎表明,第二个SplitContainer(孩子)得到了预期的点,并且非常满意这种安排,没有任何障碍。但是,当测试启用单窗格视图的设置时,结果如下:
使用以下代码禁用masterSplitContainer.Panel2
:
masterSplitContainer.Panel2Collapsed = true;
masterSplitContainer.Panel2.Hide();
在这种情况下,我希望DataGridView假定masterSplitContainer的完整操作区域,而不是保留其预定义的边界,这些边界的设置只是因为那是我添加零件时面板分割器的位置。
对于消除过程,同样的事情发生在放置在子SplitContainer中的第二个DataGridView(即bottomSplitContainer.Panel1
) - 它也不遵守其封闭区域。
到目前为止,我已经对此进行了一些阅读,看起来这可能是一个锚定问题,但我对.NET和Windows Forms的经验非常有限,所以这可能需要一点点手持或指出明显的错误。
此外,如果您需要更多实际的代码引用,我很乐意根据请求发布表单类。
答案 0 :(得分:0)
试试这个:
添加以下方法:
public static void DoubleBuffered(this DataGridView dgv, bool setting)
{
Type dgvType = dgv.GetType();
PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
BindingFlags.Instance | BindingFlags.NonPublic);
if (pi != null) pi.SetValue(dgv, setting, null);
}
这样称呼:
dataGridView1.DoubleBuffered(true);
dataGridView1已成为您分割面板中的一个。