TextRenderer.MeasureTextが言うよりも、より多くのスペースを必要とするにLinkLabel
-
11-09-2019 - |
質問
これは、そのテキストを表示するために必要な高さを返します。
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は、このクリッピングするテキストの最後の原因となります文字間との時間にもう少し間隔と思われるものを使用してテキストを描画します。これを防ぐために、とにかくありますか?リンクがある場合、私はパディングを追加しようとしましたが、はるかに多くのスペースが必要になります正確にどのように知っている信頼できる方法はありません。これを行うには、他の方法はありますか?
他のヒント
は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;
未解決のきれいな、私はそれが動作しますよね。