Як зберегти мітку з центром у WinForms?


137

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

Я хотів би закреслити цю мітку у формі центру. Я хочу рішення, яке буде тримати його в центрі, чи є лише одне слово або ціле речення на етикетці.

Відповіді:


281

Set Label«s AutoSizeвластивість False, TextAlignвластивість MiddleCenterі Dockвластивість Fill.


дякую дециклону, він спрацював. Ви можете PLZ керівництво, що Dock робить?
haansi

3
За допомогою Control.Dockвластивості ( msdn.microsoft.com/en-us/library/… ) ви можете приєднати (приклеїти) елемент керування до певної сторони контейнера. Так , наприклад Left, Top, Rightабо Bottom. Fillповідомляє елементу управління зайняти все наявне місце в контейнері.
дециклон

1
Якщо ви не хочете, щоб мітка заповнила весь доступний їй простір, ви можете встановити для властивості Dock значення "None", як запропонував користувач3866622 у своєму програмному рішенні.
Тім

3
Працював, але мені нічого не потрібно було робити для Dockналаштування.
Джим Фелл

4
Dockналаштування було непотрібне. Зміна AutoSizeвластивості дає мітці обмежувальне поле, яким ви можете вручну відрегулювати розмір.
Нік Робертс

13

Дещо незначного додаткового вмісту для налаштування програмно:

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

Вирівнювання стилю та вмісту може відрізнятися від ваших потреб. Наприклад, для простої мітки у формі wpf я використовую DockStyle.None.



10

Якщо ви не хочете стикувати ярлик у всій доступній області, просто встановіть події SizeChanged замість TextChanged. Зміна кожної літери змінить властивість ширини мітки, а також її тексту, коли властивість автоматичного розміру встановлено на 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

Я хотів зробити щось подібне, але на формі з фоновим зображенням я виявив, що коли текст на мітці змінив перефарбування, було очевидним за допомогою цього методу, тому я зробив наступне: * Встановіть мітку 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 мітки на це повернене значення. Це гарантувало, що етикетка завжди знаходилася в центрі форми, коли текст змінювався, а перефарбовування для форми на весь екран не було очевидним.


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

Це дійсно центр

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.