我正在尝试在页面上动态定位控件,当宽度小于控件的总宽度时,我已经将控件“包装”到下一行。 我现在遇到的问题是让间距正确。
我目前有以下内容;
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。
不知道我怎么能解决这个问题呢?
答案 0 :(得分:0)
好的,这里的问题是我将Width
属性传递给parentWidth
参数。我实际需要做的是传递ClientSize.Width
属性。这解决了问题,现在按钮正确布局。