2014-02-22 43 views
0

我想動態地定位頁面上的控件,當寬度小於控件的總寬度時,我已經將控件「包裝」到下一行。 現在我遇到的問題是正確的間距。動態控制定位

我目前有以下;

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,我也可以訪問DevExpress。

編輯:
懷疑我的方法有一個四捨五入的問題。不知道我怎樣才能解決它;
在這種情況下,seperationWidth是7並且控制寬度是128.
7 + 128 + 7 + 128 + 7 + 128 + 7 + 128 + 7 = 547。 不知道我怎麼能解決這個問題呢?

Example

+0

是否有一個特別的原因,你不只是使用FlowLayoutPanel? – jmcilhinney

+0

當我以編程方式添加它們時,它會自動佈局控件嗎? – Trent

+0

爲什麼我會提到它,如果沒有。閱讀該類的MSDN文檔,這應該是您指向新類型或成員時首先執行的操作。 – jmcilhinney

回答

0

OK,所以這裏的問題是,我經過Width財產入parentWidth參數。我真正需要做的是通過ClientSize.Width屬性。這解決了問題,現在按鈕正確佈局。