Как сохранить ярлык в WinForms?

В WinForms Я использую Label для отображения различных сообщений, таких как успех, сбой и т.д.

Я хотел бы сосредоточить этот ярлык в центральной форме. Я хочу решение, которое будет поддерживать его в центре, есть ли только одно слово или целое предложение в ярлыке.

Ответ 1

Задайте для свойства Label AutoSize свойство False, TextAlign свойство MiddleCenter и Dock для Fill.

Ответ 2

Вы получите его с настройкой свойства Якорь: Нет.

Ответ 3

Некорректный дополнительный контент для программной настройки:

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

Докстайл и выравнивание контента могут отличаться от ваших потребностей. Например, для простой метки в форме wpf я использую DockStyle.None.

Ответ 4

Если вы не хотите прикреплять ярлык во всей доступной области, просто установите событие SizeChanged вместо TextChanged. Изменение каждой буквы изменит свойство ширины метки, а также ее текст, если свойство autosize установлено на True. Таким образом, кстати, вы можете использовать любую формулу, чтобы держать метку в центре.

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

Ответ 5

Я хотел сделать что-то похожее, но в форме с фоновым изображением я обнаружил, что при изменении текста в метке перерисовки были очевидны при использовании этого метода, поэтому я сделал следующее: * Установите для метки AutoSize значение true и для TextAlign значение MiddleCenter

Затем каждый раз, когда текст менялся (мой был сделан с использованием таймера), я вызывал следующий метод:

    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 это возвращаемое значение. Это гарантировало, что метка всегда была в центре формы, когда текст изменялся, и перерисовки для полноэкранной формы не были очевидны.

Ответ 6

Принятый ответ не работает для меня по двум причинам:

  1. У меня установлено BackColor, поэтому настройка AutoSize = false и Dock = Fill заставляет цвет фона заполнить всю форму
  2. Я не мог установить AutoSize на false в любом случае, потому что текст моей метки был динамическим

Вместо этого я просто использовал ширину формы и ширину метки для вычисления смещения влево:

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

Ответ 7

Вы можете попробовать следующий фрагмент кода:

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

Это действительно центр

enter image description here