Bagaimana seseorang bisa mendapatkan fungsionalitas bungkus kata Label
untuk teks yang keluar dari batas?
184
Jawaban cepat: matikan AutoSize .
Masalah besar di sini adalah bahwa label tidak akan mengubah ketinggiannya secara otomatis (hanya lebar). Untuk melakukannya dengan benar, Anda perlu mensubclass label dan menyertakan logika pengubahan ukuran vertikal.
Pada dasarnya yang perlu Anda lakukan di OnPaint adalah:
Anda juga perlu mengatur bendera gaya ResizeRedraw di konstruktor.
Sebenarnya, jawaban yang diterima tidak perlu rumit.
Jika Anda mengatur label ke AutoSize, label itu akan secara otomatis tumbuh dengan teks apa pun yang Anda masukkan ke dalamnya. (Ini termasuk pertumbuhan vertikal.)
Jika Anda ingin menjadikannya bungkus kata pada lebar tertentu, Anda dapat mengatur properti MaximumSize.
Diuji dan bekerja.
sumber
Dock
properti label dan panelTop
, bukan solusi saya.OnResize
orang tua dan panggilanmyLabel.MaximumSize = new Size(Bounds.Width, 0);
Dalam kasus saya (label pada panel) saya mengatur
label.AutoSize = false
danlabel.Dock = Fill
. Dan teks label dibungkus secara otomatis.sumber
Tidak ada properti autowrap tetapi ini dapat dilakukan secara terprogram untuk mengukurnya secara dinamis. Berikut ini satu solusinya:
Pilih properti label
AutoSize
=True
MaximumSize
= ( Lebar , Tinggi ) di mana Lebar = ukuran maksimum yang Anda inginkan untuk label dan Tinggi = berapa banyak piksel yang ingin Anda bungkussumber
Dari MSDN , Secara Otomatis Bungkus Teks dengan Label :
sumber
Height = sz.Height + Padding.Vertical;
)Saya harus menemukan solusi cepat, jadi saya hanya menggunakan TextBox dengan properti-properti itu:
sumber
Dapatkan yang lebih baik berdasarkan jawaban @hypo
int width = this.Parent == null ? this.Width : this.Parent.Width;
ini memungkinkan Anda untuk menggunakan label tumbuh-otomatis ketika merapat ke orangtua, misalnya panel.this.Height = sz.Height + Padding.Bottom + Padding.Top;
di sini kami menangani bantalan untuk atas dan bawah.sumber
Pegang
ClientSizeChanged event
untuk panel, membuat label mengisi ruang:Atur
Auto-Size
label untuktrue
Dock
label untukFill
sumber
Tidak yakin itu akan cocok dengan semua use-case, tetapi saya sering menggunakan trik sederhana untuk mendapatkan perilaku pembungkus: masukkan
Label
dengan AndaAutoSize=false
di dalam 1x1TableLayoutPanel
yang akan mengurusLabel
ukurannya.sumber
Atur Properti AutoEllipsis ke 'TRUE' dan Properti AutoSize ke 'FALSE'.
sumber
Jika panel Anda membatasi lebar label Anda, Anda dapat mengatur properti Anchor label Anda ke Kiri, Kanan dan set AutoSize ke true. Ini secara konseptual mirip dengan mendengarkan acara Panel
SizeChanged
dan memperbarui label MaximumSize label kenew Size(((Control)sender).Size.Width, 0)
seperti yang disarankan oleh jawaban sebelumnya . Setiap sisi yang tercantum dalam properti Anchor, well, berlabuh ke sisi bagian dalam Kontrol masing-masing. Jadi daftar dua sisi yang berlawanan di Anchor secara efektif menentukan dimensi kontrol. Penahan ke Kiri dan Kanan mengatur properti Lebar Kontrol dan Penahan ke Atas dan Bawah akan mengatur properti Ketinggiannya.Solusi ini, seperti C #:
sumber
Jika Anda benar-benar ingin mengatur lebar label independen dari konten, saya menemukan bahwa cara termudah adalah ini:
Sekarang label memiliki lebar konstan, tetapi menyesuaikan ketinggiannya secara otomatis.
Kemudian untuk teks dinamis, kurangi ukuran font. Jika perlu, gunakan cuplikan ini di sub di mana teks label diatur:
sumber
Ini membantu saya dalam Formulir saya yang disebut InpitWindow: In Designer for Label:
Seluruh kode formulir saya
sumber
Jika dimensi tombol perlu dijaga agar tidak berubah:
sumber
Jawaban sederhana untuk masalah ini adalah mengubah properti DOCK dari Label. Ini adalah "NONE" secara default.
sumber
sumber
Gunakan
style="overflow:Scroll"
dalam label seperti pada HTML di bawah ini. Ini akan menambahkan bilah gulir di label di dalam panel.sumber