2 Stimmen

Größe des Formulars abhängig von der Textlänge ändern

Ich entwickle eine Desktop-Anwendung in C#, die Pop-up-Meldungen alle X Zeit zeigt. Hierfür verwende ich eine Bibliothek namens PopupNotify und ich möchte, dass das Etikett, das die Nachricht (genannt NotifyMessage) enthält, eine feste Breite hat und sich bei Überlauf vertikal vergrößert.

Es gibt ein Ereignis, in dem sie dies einrichten, aber ich kann es nicht ändern, damit es funktioniert. Hier ist der Code des Ereignisses:

    private void SetLayout() 
    {
        int padding = 8;
        int iconRightPadding = 0;
        int border = 1;

        iconBox.Left = padding + border;
        iconBox.Top = padding + border;
        iconBox.Width = IconWidth;
        iconBox.Height = IconHeight;

    this.Height = iconBox.Height + 2 * padding + 2 * border;

    closeButton.Left = Width - padding - border - closeButton.Width + 3;
    closeButton.Top = padding + border - 3;

    NotifyTitle.Top = iconBox.Top - 5; //fudge factor
        NotifyTitle.Left = iconBox.Right + iconRightPadding;

    NotifyMessage.Left = NotifyTitle.Left + 1; //fudgy
        NotifyMessage.Width = Width - NotifyMessage.Left - padding - border;
        NotifyMessage.Top = NotifyTitle.Bottom;
        NotifyMessage.Height = Height - NotifyMessage.Top - padding - border;
    }

Ich habe versucht, die Logik und die Art der Berechnung der Höhe durch Hinzufügen der Höhe von NotifyMessage und einige andere Dinge zu ändern, aber nichts davon hat funktioniert.

Ich bin für jede Hilfe dankbar.

4voto

Hans Passant Punkte 894572

Sie müssen TextRenderer.MeasureText verwenden, um die erforderliche Höhe des Etiketts zu berechnen. Dies sollte in der Nähe sein:

public static int CalcLabelHeight(Label lbl) {
    Size sz = new Size(lbl.ClientSize.Width, Int32.MaxValue);
    sz = TextRenderer.MeasureText(lbl.Text, lbl.Font, sz, TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl);
    int height = sz.Height;
    if (height < lbl.Font.Height) height = lbl.Font.Height;
    return height + lbl.Padding.Vertical;
}

Stellen Sie dann die Eigenschaft ClientSize des Formulars so ein, dass das Etikett passt.

2voto

Luiscencio Punkte 3775

Aus meinem Kommentar:

versuchen Sie, dieses schöne Etikett anzudocken

2voto

jgauffin Punkte 97446

Etwa so:

Graphics g = wnd.CreateGraphics();
String s = "Your string";
SizeF size = g.MeasureString(Font, s);
myHeight = size.Height + padding + border;

Verwenden Sie StringFormat als Argument für MeasureString, um Optionen für den Umbruch bei der Berechnung der korrekten Höhe anzugeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X