根据文本长度调整表单大小

时间:2010-07-19 18:33:37

标签: c#

我正在用C#开发一个桌面应用程序,每隔X个时间显示弹出消息。为此,我正在使用一个名为PopupNotify的库,我希望包含消息的标签(称为NotifyMessage)具有固定宽度,并在溢出时垂直放大。

有一个事件他们设置了它,但我不能修改它以使其工作。这是事件的代码:

    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;
    }

我尝试修改它的逻辑,以及通过添加NotifyMessage的高度以及其他一些东西来计算其高度的方式,但它们都没有用。

我会对此表示感谢。

3 个答案:

答案 0 :(得分:3)

您需要使用TextRenderer.MeasureText来计算标签所需的高度。这应该很接近:

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;
}

从那里,设置表单的ClientSize属性以适合标签。

答案 1 :(得分:2)

来自我的评论:

尝试对接那个漂亮的标签

答案 2 :(得分:2)

这样的事情:

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

使用StringFormat作为MeasureString的参数,以在计算正确的高度时指定包装选项。