如果我给TextRenderer.MeasureText一些文本来测量和宽度以使用它会返回到显示该文本所需的高度。

private static int CalculateHeight(string text, Font font, int width)
{
    Size size = TextRenderer.MeasureText(text, font, new Size(width, Int32.MaxValue), TextFormatFlags.NoClipping | TextFormatFlags.WordBreak);
    return size.Height;
}

如果我给该文本,宽度和高度,以将LinkLabel它将显示修剪掉在宽度和高度设置有什么的文本。

但是,如果我把一个链接到LinkLabel.Links收藏,LinkLabel的将绘制似乎是人物之间,有时这会导致文本的结尾被裁剪多一点空间的文本。反正是有防止这种情况?我试着添加填充时,有一个链接,但有知道的更多的空间究竟如何需要没有可靠的方法。是否有其他方法可以做到这一点?

有帮助吗?

解决方案

您应该使用 Control.GetPreferredSize 的方法来计算的宽度或高度需要的控制(LinkLabel的你的情况)。你不应该使用MeasureText这样的目的,更详细的解释,你可以在这里找到(精度的TextRenderer.MeasureText结果。)

其他提示

如果一个LinkLabel包含多于一个链接,或者有它们也不向链路,则控制使用Graphics.DrawString/MeasureString代替TextRenderer.DrawText/MeasureText的文本的部分。你可以很容易地看到它在行动,在渲染的最大区别是与小L字形:

linkLabel1.Text = new string('l', 100); // 100 x small L
linkLabel1.LinkArea = new LinkArea(0, 50);
linkLabel2.Text = new string('l', 100); // 100 x small L 

TextRenderer.MeasureText是用于 DrawTextEx API。返回的值来自LPRC结构。你可能想看看这个API的更多细节。

我想你可以删除,使得它强调的风格。 linkLabel.Styles.Add("text-decoration", "none");但那么当然就不会看起来像一个链接。 : - /

另一种解决方案是添加自己我想的填充。

int heightBefore = linkLabel.Height;
int fontHeight = CalculateHeight(linkLabel.Text, linkLabel.Font, linkLabel.Width);
int paddingHeight = heightBefore - fontHeight;
linkLabel.Font = otherFont;
linkLabel.Height = CalculateHeight(linkLabel.Text, otherFont, linkLabel.Width);
linkLabel.Height += paddingHeight;

不解决方案的最漂亮的,但我估计它的工作原理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top