【发布时间】:2011-04-09 01:55:57
【问题描述】:
我花了一整天的时间试图解决这个问题,但没有令人满意的结果。
我必须在它们的容器(面板)内居中放置一些标签。如果只有一个标签,那将是一件轻而易举的事,但生活并不容易,我必须编写一种方法来使多个对象居中并克服两个问题:
- 可以是 1 到 8 个之间的任意数量的标签,我不知道设计时有多少。
- 我必须能够指定标签之间的确切间距。
如果不是2,这不会那么难,经过一番思考,我想出了这个:
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 方法工作,那将是非常有启发性的。我有一种感觉,在不久的将来我会需要这个,但我不知道该怎么做。
【问题讨论】:
标签: c# winforms user-interface