Bagaimana cara agar label tetap berpusat di WinForms?


138

Di WinFormssaya menggunakan a Labeluntuk menampilkan pesan yang berbeda seperti sukses, kegagalan, dll.

Saya ingin memusatkan label itu di formulir tengah. Saya ingin solusi yang akan membuatnya tetap terpusat baik hanya ada satu kata atau seluruh kalimat di label.

Jawaban:


285

Set Label's AutoSizeproperti untuk False, TextAlignproperti untuk MiddleCenterdan Dockproperti untuk Fill.


terima kasih decyclone, itu berhasil. bisakah kamu memandu apa yang dilakukan Dock?
haansi

3
Dengan Control.Dockproperti ( msdn.microsoft.com/en-us/library/… ), Anda dapat memasang (menempel) kontrol ke sisi tertentu wadah. Misalnya Left, Top, Rightatau Bottom. Fillmemberi tahu kontrol untuk mengambil semua ruang yang tersedia di penampung.
decyclone

1
Kecuali Anda ingin label mengisi seluruh ruang yang tersedia, Anda mungkin ingin menyetel properti Dock ke "Tidak Ada" seperti yang disarankan oleh pengguna3866622 dalam solusi terprogramnya.
Tim

3
Berhasil, tetapi saya tidak perlu melakukan apa pun pada Dockpengaturan tersebut.
Jim Fell

4
Dockpengaturan tidak perlu. Mengubah AutoSizeproperti memberi label kotak pembatas yang dapat Anda sesuaikan ukurannya secara manual.
Nick Roberts

13

Beberapa konten tambahan kecil untuk disetel secara terprogram:

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

Dockstyle dan Content alignment mungkin berbeda dari kebutuhan Anda. Misalnya, untuk label sederhana pada formulir wpf saya menggunakan DockStyle.None.



10

Jika Anda tidak ingin menempelkan label di seluruh area yang tersedia, cukup setel acara SizeChanged alih-alih TextChanged. Mengubah setiap huruf akan mengubah properti lebar label serta teksnya ketika properti ukuran otomatis disetel ke True. Jadi, omong-omong, Anda dapat menggunakan rumus apa pun untuk menjaga label tetap di tengah formulir.

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

2

Jawaban yang diterima tidak berhasil untuk saya karena dua alasan:

  1. Saya telah BackColormengatur jadi pengaturan AutoSize = falsedan Dock = Fillmenyebabkan warna latar belakang mengisi seluruh formulir
  2. Saya tidak bisa AutoSizemenyetel ke false karena teks label saya dinamis

Sebagai gantinya, saya hanya menggunakan lebar formulir dan lebar label untuk menghitung offset kiri:

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

1

Saya ingin melakukan sesuatu yang serupa, tetapi pada formulir dengan gambar latar belakang, saya menemukan bahwa ketika teks di label mengubah pengecatan ulang terlihat jelas dengan metode ini, jadi saya melakukan hal berikut: * Setel label UkuranOtomatis ke true dan TextAlign ke MiddleCenter

Kemudian, setiap kali teks berubah (milik saya selesai menggunakan timer) saya memanggil metode berikut:

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

Dan setel properti Lokasi label ke nilai pengembalian ini. Ini memastikan bahwa label selalu berada di tengah formulir ketika teks berubah dan pengecatan ulang untuk formulir layar penuh tidak jelas.


1

Anda dapat mencoba cuplikan kode berikut:

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

Ini Benar-benar Center

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.