【问题标题】:Anchoring - Make two components take up half of panel each锚定 - 使两个组件各占面板的一半
【发布时间】:2012-07-18 20:20:39
【问题描述】:

我有什么:

我有一个面板(空白区域)和两个由绿色和蓝色方块表示的 DataGridView。该面板固定在我屏幕的大部分中心,并随着窗口大小而增大/缩小。

我需要什么:

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

基本上,我只是希望它始终看起来像这张图片。

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

【问题讨论】:

  • 不,如果你这样做,绿色和蓝色方块会重叠,因为它们会拉伸很多很多,但会从左/右保持相同的像素宽度。不过谢谢:)
  • 一旦我有时间尝试它就完美了 :) 谢谢。

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


【解决方案1】:

不确定这是不是你想要的:

  1. 在屏幕上创建一个 SplitContainer。

    Anchor = Top, Bottom, Left, Right
    IsSplitterFixed = True (Trick)
    
  2. 创建另外两个数据网格视图,每个在 SplitterContainer 中的一侧

    Dock = Fill
    

【讨论】:

  • 我什至没有想过要专门为这种情况寻找容器。 :p 谢谢。
【解决方案2】:

我通常使用TableLayoutPanel 来完成此操作。非常好用(简单介绍可以找here)。

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

【讨论】:

  • 我更喜欢这个解决方案。感觉不像使用 SplitContainer 那样笨重,而且更容易根据自己的喜好进行配置。
【解决方案3】:

我尝试了使用 TableLayoutPanel 的解决方案,效果很好。

但是如果你想使用不同的定位,TableLayoutPanel 内部的布局有点不方便和受限。

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

  • 为左边的项目定义锚定到左边
  • 为右侧项目定义无左/右锚定

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

我在表单中添加了一个 OnSizeChanged 处理程序,它实现了以下几行:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    相关资源
    最近更新 更多