2

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 は文字間の間隔が少し広く見えるテキストを描画し、場合によってはテキストの最後が切り取られます。これを防ぐ方法はありますか?リンクがある場合にパディングを追加しようとしましたが、さらに必要なスペースを正確に知る確実な方法はありません。これを行う他の方法はありますか?

4

4 に答える 4

2

Control.GetPreferredSizeメソッドを使用して、コントロールに必要な幅または高さを計算する必要があります (この場合は LinkLabel)。このような目的で MeasureText を使用しないでください。詳細については、こちらを参照してください (TextRenderer.MeasureText の結果の精度)。

于 2009-07-29T13:10:45.430 に答える
1

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 
于 2009-07-29T02:06:10.397 に答える
0

下線を引くスタイルを削除できると思います。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;

最も美しいソリューションではありませんが、うまくいくと思います。

于 2009-06-05T21:55:15.030 に答える
0

TextRenderer.MeasureText は、DrawTextEx API のマネージ ラッパーです。返される値は lprc 構造体から取得されます。詳細については、その API を参照してください。

于 2009-06-05T16:31:08.693 に答える