WinForms에서 레이블을 중앙에 유지하려면 어떻게합니까?


137

에서 WinFormsa Label를 사용하여 성공, 실패 등과 같은 다른 메시지를 표시합니다.

해당 라벨을 중앙 형식으로 가운데에 배치하고 싶습니다. 레이블에 단어가 하나만 있거나 전체 문장이 있는지 여부를 중심으로 유지할 솔루션을 원합니다.

답변:


281

세트 LabelAutoSize재산 False, TextAlign재산 MiddleCenterDock재산에 Fill.


고마워 디시 클로 네, 그것은 효과가 있었다. 도크가 무엇을 안내 할 수 있습니까?
haansi

3
으로 Control.Dock부동산 ( msdn.microsoft.com/en-us/library/... ), 당신은 (스틱) 컨테이너의 특정 측면에 컨트롤을 고정 할 수 있습니다. 예를 들어 Left, Top, Right또는 Bottom. Fill컨테이너에서 사용 가능한 모든 공간을 사용하도록 컨트롤에 지시합니다.
decyclone

1
레이블이 사용 가능한 전체 공간을 채우지 않으려는 경우 프로그램 솔루션에서 user3866622가 제안한대로 Dock 속성을 "없음"으로 설정할 수 있습니다.
Tim

3
효과가 있었지만 Dock설정 에 대해 아무것도 할 필요가 없었습니다 .
Jim Fell

4
Dock설정이 불필요합니다. AutoSize속성을 변경하면 레이블에 수동으로 크기를 조정할 수있는 경계 상자가 나타납니다.
Nick Roberts

13

프로그래밍 방식으로 설정하기위한 몇 가지 사소한 추가 콘텐츠 :

Label textLabel = new Label() { 
        AutoSize = false, 
        TextAlign = ContentAlignment.MiddleCenter, 
        Dock = DockStyle.None, 
        Left = 10, 
        Width = myDialog.Width - 10
};            

Dockstyle 및 내용 정렬은 필요에 따라 다를 수 있습니다. 예를 들어 wpf 양식의 간단한 레이블에는 DockStyle.None을 사용합니다.



10

사용 가능한 전체 영역에 레이블을 고정하지 않으려면 TextChanged 대신 SizeChanged 이벤트를 설정하십시오. 각 문자를 변경하면 자동 크기 속성이 True로 설정된 경우 레이블의 너비 속성과 텍스트가 변경됩니다. 따라서 모든 수식을 사용하여 레이블을 중앙에 유지할 수 있습니다.

private void lblReport_SizeChanged(object sender, EventArgs e)
{
    lblReport.Left = (this.ClientSize.Width - lblReport.Size.Width) / 2;
}

2

허용 된 답변이 두 가지 이유로 나에게 효과가 없었습니다.

  1. 나는 BackColor그렇게 설정 AutoSize = false했고Dock = Fill 전체 양식을 채우기 위해 배경색을 발생
  2. AutoSize레이블 텍스트가 동적이므로 어쨌든 false로 설정할 수 없습니다

대신, 단순히 폼의 너비와 레이블의 너비를 사용하여 왼쪽 오프셋을 계산했습니다.

MyLabel.Left = (this.Width - MyLabel.Width) / 2;

1

비슷한 것을하고 싶었지만 배경 이미지가있는 양식에서 레이블의 텍스트가 변경되었을 때이 방법으로 다시 페인트가 분명하다는 것을 알았습니다. 따라서 다음을 수행했습니다. 미들 센터

그런 다음 텍스트가 변경 될 때마다 (타이머를 사용하여 광산이 완료되었습니다) 다음 방법을 호출했습니다.

    private Point GetPosition()
    {
        int y = (this.Height / 2) - (label1.Height / 2);
        int x = (this.Width / 2) - (label1.Width / 2);
        return new Point(x, y);
    }

레이블의 Location 속성을이 반환 값으로 설정하십시오. 이렇게하면 텍스트가 변경되고 전체 화면 양식의 다시 그리기가 명확하지 않은 경우 레이블이 항상 양식의 중앙에있게됩니다.


1

다음 코드 스 니펫을 시도해 볼 수 있습니다.

private Point CenterOfMenuPanel<T>(T control, int height=0) where T:Control {
    Point center = new Point( 
        MenuPanel.Size.Width / 2 - control.Width * 2,
        height != 0 ? height : MenuPanel.Size.Height / 2 - control.Height / 2);

    return center;
}

정말 중심이야

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.