我花了整整一天的時間試圖解決這個問題,但沒有取得令人滿意的結果。如何在給定的容器內水平居中多個對象?
我必須在它們的容器(面板)中放置一些標籤。如果只是一個標籤,那將是一件輕而易舉的事,但生活是不容易的,我必須寫居中多個對象和克服兩個問題的方法:
- 這可能是1之間的任何數量的標籤8,在設計時我不知道有多少。
- 我必須能夠指定標籤之間的確切間距。
如果不是因爲,這不會是這麼辛苦,經過一番思考,我想出了這一點:
private void panel1_Resize(object sender, EventArgs e)
{
int position = 1;
foreach (Label l in panel1.Controls)
{
CenterToParent(l, panel1.Controls.Count, position);
position++;
}
}
private static void CenterToParent(Label lbl, int qty, int pos)
{
lbl.SetBounds((lbl.Parent.Bounds.Width - lbl.Width) * pos/(qty + 1),
lbl.Location.Y, lbl.Width, lbl.Height);
}
但是這樣的標籤之間的空間將改變面板的寬度發生變化,這個間隙必須是固定的大小。這也是爲什麼我不能簡單地使用TableLayoutPanel。 PS:如果你會這麼友好,如果你不知道對象類型(只是它具有相同的屬性)而使CenterToParent方法有效,那將是非常有啓發性的。我有一種感覺,我將在不久的將來需要這個,我不知道如何去做。
這樣做,非常感謝!這些對象有點偏離中心,但僅僅因爲最後一個對象不需要偏移量,我已經爲_totalWidth_添加了一個' - Offset',現在它已經很完美了。我意識到可能會發生崩潰,但我知道該面板中只有標籤。對於最後的請求,我嘗試使用'Object',但從未想過使用'Control'。非常明顯。 :) – 2011-04-09 03:37:06