锚定 - 使两个组件占据每个面板的一半

时间:2012-07-18 20:20:39

标签: c# winforms user-interface .net-4.0 anchor

我有什么:

我有一个面板(白色空间),以及由绿色和蓝色方块表示的两个DataGridView。面板固定在占据屏幕中心的大部分位置,并随窗口大小增大/缩小。

我需要什么:

我希望绿色方块始终保持在屏幕中间的右边框并占据屏幕的左半部分。同样,我希望蓝色正方形的左边框保持在中间,并占据屏幕的右半部分。

基本上,我只是希望它总是看起来像这个图像。

我是否需要以编程方式执行此操作?我似乎无法找到实现这种情况的锚定或对接的组合,并且添加更多面板作为容器最终会产生相同的问题。

DataGridViews In Panel Layout

3 个答案:

答案 0 :(得分:24)

不确定这是否是您想要的:

  1. 在屏幕上创建SplitContainer。

    Anchor = Top, Bottom, Left, Right
    IsSplitterFixed = True (Trick)
    
  2. 创建另外两个datagridviews,每个都在SplitterContainer

    Dock = Fill
    

答案 1 :(得分:12)

我通常使用TableLayoutPanel来完成此任务。它非常易于使用(可以找到简单的介绍here)。

您创建第一行中的单元格并将其设置为每个50%的宽度。在每个单元格中,您放置一个DataGrid并将Dock设置为Fill

答案 2 :(得分:0)

我尝试了使用TableLayoutPanel的解决方案,该方法工作正常。

但是,如果要使用其他位置,TableLayoutPanel内的布局会有些麻烦并且受到限制。

我找到了另一种解决方案,只需少量的编程工作即可完成

  • 在左侧项目中,将锚定到左侧
  • 对于右边的项目,请不要定义左/右锚点

这将导致在调整表单大小时左侧项目保留在其位置,而右侧项目则将其保留在中间位置。

我在窗体中添加了一个OnSizeChanged处理程序,该处理程序实现了以下几行:

int widthForItem = Item2.Left - Item1.Left; // you can subtract a distance here
Item1.Width = widthForEachItem;
Item2.Width = widthForEachItem