Zeilenumbruch für ein Label in Windows Forms
Wie kann man die word-wrap-Funktionalität für ein label in Windows Forms?
Legte ich ein label in ein panel, und fügte einige text-label dynamisch. Aber es übersteigt die panel-Länge. Wie kann ich dieses Problem lösen?
InformationsquelleAutor der Frage Nagu | 2009-07-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die schnelle Antwort: - Schalter aus AutoSize.
Das große problem hier ist, dass das label wird sich nicht ändern seine Höhe automatisch (nur Breite). Um dieses Recht zu bekommen, müssen Sie eine Unterklasse der label und gehören vertikal resize-Logik.
Im Grunde, was Sie tun müssen, um in OnPaint ist:
Werden Sie auch brauchen, um die ResizeRedraw Stil-flag im Konstruktor.
InformationsquelleAutor der Antwort Jonathan C Dickinson
Eigentlich die akzeptierte Antwort ist unnötig kompliziert.
Wenn Sie die label auf AutoSize, wird es automatisch wachsen mit dem, was text, den Sie in Sie setzen. (Dies umfasst vertikale Wachstum.)
Wenn Sie es machen will, der Zeilenumbruch an einer bestimmten Breite, die Sie festlegen können, der Eigenschaft MaximumSize.
Getestet und funktioniert.
InformationsquelleAutor der Antwort John Gietzen
In meinem Fall (label auf einem panel) ich
label.AutoSize = false
undlabel.Dock = Fill
.Und der label-text wird automatisch umgebrochen.
InformationsquelleAutor der Antwort alex555
Schlechte Nachricht: es gibt nicht eine autowrap-Eigenschaft.
Gute Nachricht: es gibt ein Licht am Ende des Tunnels!
Sie können dies erreichen, programmgesteuert die Größe dynamisch, aber hier ist die einfachste Lösung:
MaximumSize = (BreiteHöhe), wo Breite = maximale Größe, die Sie wollen, dass die label zu sein, und Höhe = wie viele Pixel Sie wollen, es zu wrap -
InformationsquelleAutor der Antwort Sebastian Castaldi
Vom MSDNAutomatisch Umbrechen von Text im Label:
InformationsquelleAutor der Antwort hypo
Hatte ich eine rasche Lösung zu finden, so dass ich nur eine TextBox mit diesen Eigenschaften:
InformationsquelleAutor der Antwort user3356581
Haben eine bessere basierend auf @hypo 's Antwort
int width = this.Parent == null ? this.Width : this.Parent.Width;
dies ermöglicht die Verwendung von auto-grow " - label, wenn diese zu einem übergeordneten, z.B. ein panel.this.Height = sz.Height + Padding.Bottom + Padding.Top;
hier, wir kümmern uns um die Polsterung für oben und unten.InformationsquelleAutor der Antwort march1993
Griff die
ClientSizeChanged event
für das panel, wodurch dielabel füllen den Raum:
Set
Auto-Size
für das label zutrue
Dock
für das label zuFill
InformationsquelleAutor der Antwort noelicus
Nicht sicher, es wird passen für alle Einsatz-Fälle, aber verwende ich oft einen einfachen trick, um die Umhüllung Verhalten:
setzen Sie Ihre
Label
mitAutoSize=false
innerhalb eines 1x1TableLayoutPanel
die kümmern sich um dieLabel
's Größe.InformationsquelleAutor der Antwort Pragmateek
Legen Sie die AutoEllipsis Eigenschaft auf 'TRUE' und AutoSize-Eigenschaft auf 'FALSE'.
InformationsquelleAutor der Antwort Ravi Kumar G N
Wenn Ihr panel ist die Begrenzung der Breite der Beschriftung, können Sie Ihre Labels Anchor-Eigenschaft Links, Rechts und setzen Sie AutoSize auf true. Dieses ist begrifflich ähnlich zu hören für das Panel
SizeChanged
Ereignis und aktualisiert das label MaximumSize zu einemnew Size(((Control)sender).Size.Width, 0)
wie vorgeschlagen von eine Vorherige Antwort. Alle Seiten aufgelistet, in die Anchor-Eigenschaft ist, gut verankert mit der Kontrolle der jeweiligen inneren Seite. Also mit den beiden entgegengesetzten Seiten in der Anker-effektiv, stellt die Kontrolle der dimension. Die Verankerung Links und Rechts legt die Breite des Steuerelements Eigenschaft und Verankerung nach Oben und Unten legen Sie die Height-Eigenschaft.Diese Lösung, wie C#:
InformationsquelleAutor der Antwort binki
Wenn Sie wirklich wollen, um die label-Breite unabhängig vom Inhalt, finde ich, dass der einfachste Weg ist dieser:
Nun ist das label von konstanter Breite, aber es passt seine Höhe automatisch.
Dann für dynamischen text, verringern Sie die Schriftgröße. Falls erforderlich, verwenden Sie dieses snippet in der sub, wo der label-text ist:
InformationsquelleAutor der Antwort Kjell Verbeke
Dies hat mich in meiner Form als InpitWindow:
Im Designer für das Label:
Den ganzen code von meinem Formular
InformationsquelleAutor der Antwort Mic
Wenn die Abmessungen der Schaltfläche müssen unverändert beibehalten werden:
InformationsquelleAutor der Antwort rjain
Die einfache Antwort für dieses problem ist zu ändern Sie die DOCK-Eigenschaft des Labels. Es ist "NONE" standardmäßig.
InformationsquelleAutor der Antwort Sunil Neeradi
Verwenden
style="overflow:Scroll"
in der Bezeichnung wie in der unten aufgeführten HTML-Code. Dies wird fügen Sie die Bildlaufleiste in der Beschriftung innerhalb der Platte.InformationsquelleAutor der Antwort Sweety Jain