Gibt es eine Möglichkeit, einen Zeilenumbruch in einem . NET Label-Steuerelement durchzuführen?
Ich weiß, dass es eine alternative Möglichkeit gibt, ein TextBox , make property BorderStyle zu none, property ReadOnly auf true setzen und Eigenschaft WordWrap und Eigenschaft Multiline zu wahr.
Gibt es etwas für ein Etikett?
Siehe Text automatisch in Etikett umbrechen. Es wird beschrieben, wie Sie Ihr eigenes wachsendes Etikett erstellen.
Hier ist die vollständige Quelle aus der obigen Referenz entnommen:
using System;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
public class GrowLabel : Label {
private bool mGrowing;
public GrowLabel() {
this.AutoSize = false;
}
private void resizeLabel() {
if (mGrowing) return;
try {
mGrowing = true;
Size sz = new Size(this.Width, Int32.MaxValue);
sz = TextRenderer.MeasureText(this.Text, this.Font, sz, TextFormatFlags.WordBreak);
this.Height = sz.Height;
}
finally {
mGrowing = false;
}
}
protected override void OnTextChanged(EventArgs e) {
base.OnTextChanged(e);
resizeLabel();
}
protected override void OnFontChanged(EventArgs e) {
base.OnFontChanged(e);
resizeLabel();
}
protected override void OnSizeChanged(EventArgs e) {
base.OnSizeChanged(e);
resizeLabel();
}
}
Ändern Sie Ihre maximale Größe,
label1.MaximumSize = new Size(100, 0);
Und setzen Sie Ihre Autosize auf true.
label1.AutoSize = true;
Das ist es!
Legen Sie einfach die AutoSize-Eigenschaft für Beschriftung auf Falsch fest. Dann wird der Text umgebrochen und Sie können die Größe des Steuerelements manuell ändern, um den Text anzuzeigen.
Ironischerweise erlaubte es mir das Ausschalten von AutoSize
durch Setzen auf false
, die Abmessungen des Beschriftungssteuerelements sowohl auf vertikal als auch horizontal anzupassen, was effektiv das Auftreten von Zeilenumbrüchen ermöglicht .
Wenn Sie das Dropdown-Menü für die Eigenschaft Text
in Visual Studio öffnen, können Sie mit der Eingabetaste Linien teilen. Dies funktioniert natürlich nur für statischen Text, es sei denn, Sie kennen die maximalen Abmessungen von dynamischem Text.
Wenn Sie eine dynamische Größenanpassung in Verbindung mit einer Beschriftung mit Zeilenumbruch wünschen, können Sie Folgendes tun:
Behandle das ClientSizeChanged event
für das Bedienfeld, wobei das Etikett den Raum ausfüllt:
private void Panel2_ClientSizeChanged(object sender, EventArgs e)
{
label1.MaximumSize = new Size((sender as Control).ClientSize.Width - label1.Left, 10000);
}
Einstellen Auto-Size
für das Label zu true
Dock
für das Label auf Fill