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

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

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



답변

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


답변

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

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

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


답변

속성 앵커 : 없음을 설정하여이를 달성합니다.


답변

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

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


답변

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

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

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

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


답변

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

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

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


답변

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

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;
}

정말 중심이야

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