Di WinForms
saya menggunakan a Label
untuk 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.
Control.Dock
properti ( msdn.microsoft.com/en-us/library/… ), Anda dapat memasang (menempel) kontrol ke sisi tertentu wadah. MisalnyaLeft
,Top
,Right
atauBottom
.Fill
memberi tahu kontrol untuk mengambil semua ruang yang tersedia di penampung.Dock
pengaturan tersebut.Dock
pengaturan tidak perlu. MengubahAutoSize
properti memberi label kotak pembatas yang dapat Anda sesuaikan ukurannya secara manual.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.
sumber
Anda akan mencapainya dengan mengatur properti Anchor: None.
sumber
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; }
sumber
Jawaban yang diterima tidak berhasil untuk saya karena dua alasan:
BackColor
mengatur jadi pengaturanAutoSize = false
danDock = Fill
menyebabkan warna latar belakang mengisi seluruh formulirAutoSize
menyetel ke false karena teks label saya dinamisSebagai gantinya, saya hanya menggunakan lebar formulir dan lebar label untuk menghitung offset kiri:
MyLabel.Left = (this.Width - MyLabel.Width) / 2;
sumber
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.
sumber
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
sumber