Die schnelle Antwort: Schalten Sie AutoSize aus .
Das große Problem hierbei ist, dass das Etikett seine Höhe nicht automatisch ändert (nur die Breite). Um dies richtig zu machen, müssen Sie die Beschriftung in Unterklassen unterteilen und die vertikale Größenänderungslogik einbeziehen.
Grundsätzlich müssen Sie in OnPaint Folgendes tun:
- Messen Sie die Höhe des Texts (Graphics.MeasureString).
- Wenn die Beschriftungshöhe nicht der Höhe des Texts entspricht, stellen Sie die Höhe ein und kehren Sie zurück.
- Zeichnen Sie den Text.
Sie müssen auch das ResizeRedraw-Stilflag im Konstruktor setzen.
Jonathan C Dickinson
quelle
Tatsächlich ist die akzeptierte Antwort unnötig kompliziert.
Wenn Sie die Beschriftung auf AutoSize setzen, wächst sie automatisch mit dem darin enthaltenen Text. (Dies schließt vertikales Wachstum ein.)
Wenn Sie den Zeilenumbruch auf eine bestimmte Breite einstellen möchten, können Sie die MaximumSize-Eigenschaft festlegen.
Getestet und funktioniert.
quelle
Dock
Eigenschaft von Beschriftung und BedienfeldTop
anstelle meiner Lösung auf festzulegen.OnResize
die Eltern geklammert und angerufenmyLabel.MaximumSize = new Size(Bounds.Width, 0);
In meinem Fall (Etikett auf einer Tafel) setze ich
label.AutoSize = false
undlabel.Dock = Fill
. Und der Etikettentext wird automatisch umbrochen.quelle
Schlechte Nachrichten: Es gibt keine Autowrap-Eigenschaft.
Gute Nachricht: Am Ende des Tunnels leuchtet ein Licht!
Sie können dies programmgesteuert durchführen, um die Größe dynamisch zu bestimmen. Hier ist jedoch die einfachste Lösung:
MaximumSize = ( Breite , Höhe ) wobei Breite = maximale Größe, die das Etikett haben soll, und Höhe = wie viele Pixel es umbrechen soll
quelle
Von MSDN , automatisch Wrap Text in Label - :
quelle
Height = sz.Height + Padding.Vertical;
)Ich musste eine schnelle Lösung finden, also habe ich nur eine TextBox mit diesen Eigenschaften verwendet:
quelle
Haben Sie eine bessere basierend auf der Antwort von @hypo
int width = this.Parent == null ? this.Width : this.Parent.Width;
Auf diese Weise können Sie das automatisch wachsende Etikett verwenden, wenn es an ein übergeordnetes Element, z. B. ein Bedienfeld, angedockt ist.this.Height = sz.Height + Padding.Bottom + Padding.Top;
hier kümmern wir uns um die Polsterung für oben und unten.quelle
Behandeln Sie das
ClientSizeChanged event
für das Panel, damit das Etikett den Raum ausfüllt:Stellen Sie
Auto-Size
für das Etikett auf eintrue
Dock
für das Etikett auf einFill
quelle
Ich bin mir nicht sicher, ob es für alle Anwendungsfälle geeignet ist, aber ich verwende oft einen einfachen Trick, um das Umhüllungsverhalten zu ermitteln: Legen Sie Ihr
Label
withAutoSize=false
in ein 1x1,TableLayoutPanel
das sich um dieLabel
Größe des Geräts kümmert .quelle
Setzen Sie die AutoEllipsis-Eigenschaft auf 'TRUE' und die AutoSize-Eigenschaft auf 'FALSE'.
quelle
Wenn Ihr Bedienfeld die Breite Ihres Etiketts begrenzt, können Sie die Anchor-Eigenschaft Ihres Etiketts auf Left, Right und AutoSize auf true setzen. Dies ähnelt konzeptionell dem Abhören des
SizeChanged
Ereignisses des Panels und dem Aktualisieren der MaximumSize des Labels auf a,new Size(((Control)sender).Size.Width, 0)
wie in einer vorherigen Antwort vorgeschlagen . Jede Seite, die in der Anchor-Eigenschaft aufgeführt ist, ist auf der jeweiligen Innenseite des enthaltenen Steuerelements verankert. Wenn Sie also zwei gegenüberliegende Seiten in Anchor auflisten, wird die Dimension des Steuerelements effektiv festgelegt. Durch Verankerung nach links und rechts wird die Width-Eigenschaft des Steuerelements festgelegt, und durch Verankerung nach oben und unten wird die Height-Eigenschaft festgelegt.Diese Lösung als C #:
quelle
Wenn Sie die Etikettenbreite wirklich unabhängig vom Inhalt einstellen möchten, ist dies meiner Meinung nach der einfachste Weg:
Jetzt hat das Etikett eine konstante Breite, passt seine Höhe jedoch automatisch an.
Verringern Sie dann für dynamischen Text die Schriftgröße. Verwenden Sie dieses Snippet bei Bedarf in dem Unterabschnitt, in dem der Beschriftungstext festgelegt ist:
quelle
Dies hat mir in meinem Formular namens InpitWindow geholfen: In Designer for Label:
Ganzer Code meines Formulars
quelle
Wenn die Abmessungen der Schaltfläche unverändert bleiben müssen:
quelle
Die einfache Antwort auf dieses Problem besteht darin, die DOCK-Eigenschaft des Labels zu ändern. Es ist standardmäßig "NONE".
quelle
quelle
Verwenden Sie
style="overflow:Scroll"
im Etikett wie im folgenden HTML. Dadurch wird die Bildlaufleiste in der Beschriftung im Bedienfeld hinzugefügt.quelle