나는 만족스런 결과없이 이것을 해결하려고 하루 종일 보냈습니다.주어진 컨테이너 안에 여러 객체를 수평 가운데에 배치하는 방법은 무엇입니까?
컨테이너 (패널) 안에 몇 개의 레이블을 가운데에 정렬해야합니다. 단지 하나 개의 레이블이 있다면 그것은 바람 일 것이다, 그러나 생활은 쉽지 않다 나는 여러 개체를 중심으로 두 개의 문제를 극복하는 방법 작성해야합니다 : 그것은 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을 사용할 수없는 이유이기도합니다.
추신 : 만약 당신이 친절하게, 아주 똑똑한 것 같아요 (내가 단지 같은 속성을 가지고) 객체 유형을 모르면 CenterToParent 방법을 작동합니다. 나는 가까운 미래에 이것을 필요로 할 것 같은 느낌이 들며 그것을하는 방법에 대한 단서가 없다.
그 트릭을 했어, 많이 고마워! 객체는 중심에서 약간 벗어 났지만 마지막 객체에는 오프셋이 필요하지 않기 때문에 _totalWidth_에 '- Offset'을 추가했으며 이제는 완벽합니다. 그 충돌을 알고 있었지만 그 패널 안에는 레이블 만 있다는 것을 알고 있습니다. 마지막 요청을 위해, 나는'Object'를 사용해 보았지만'Control'을 사용하는 것을 결코 생각하지 않았습니다. 그렇게 명백하다. :) –