动态控制定位

时间:2014-02-22 08:16:42

标签: c# winforms layout dynamic controls

我正在尝试在页面上动态定位控件,当宽度小于控件的总宽度时,我已经将控件“包装”到下一行。 我现在遇到的问题是让间距正确。

我目前有以下内容;

 public void AddControl(Control controlToAdd, int parentWidth, int allRowsHeight)
 {
     RowControls.Add(controlToAdd);

     int seperationWidth = (parentWidth - RowControls.Sum(c => c.Width)) / (RowControls.Count + 1);
     int count = 0;
     foreach (Control c in RowControls)
     {
         int xLocation = (seperationWidth*(count+1));
         for (int i = 0; i < count; i++)
         {
             xLocation += (RowControls[i].Width);
         }
         c.Location = new Point(xLocation, allRowsHeight);
         count++;
     }
 }

几乎 有效,但正如您从屏幕截图中看到的那样,控件有点太过分了,我不太清楚为什么会这样?登记/> “包装”检查基本上是seperationWidth行的重复,它确保最小间距为1,即如果间距小于1,则“换行”。

也许有一个完全不同的更好的方法来做到这一点?如果有人熟悉,我也可以访问DevExpress。

修改
怀疑我的方法有四舍五入的问题。不知道我怎么能绕过它;
在这种情况下,seperationWidth为7,控制宽度为128 7 + 128 + 7 + 128 + 7 + 128 + 7 + 128 + 7 = 547。 不知道我怎么能解决这个问题呢?

Example

1 个答案:

答案 0 :(得分:0)

好的,这里的问题是我将Width属性传递给parentWidth参数。我实际需要做的是传递ClientSize.Width属性。这解决了问题,现在按钮正确布局。