我正在用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的高度以及其他一些东西来计算其高度的方式,但它们都没有用。
我会对此表示感谢。
答案 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的参数,以在计算正确的高度时指定包装选项。