2

幅約 100 ピクセル、高さ 20 ピクセルの固定サイズのラベルがあります。

長い文字列をラベルに配置すると、テキストが 2 行目に折り返されますが、ラベルのサイズが固定されているため、2 行目が表示されません。

2 行目に折り返すのではなく、文字列がラベルの 1 行に表示されるようにフォントサイズを縮小します。これを行う簡単な方法を知っている人はいますか?

編集:

以下のコードは私のために働いています(ほとんどの場合)。私は再帰的なことをしたくありませんでした。テキストがまだ別の行にあふれている場合があります。ラベルの幅全体を真に使用できないためだと思います。それをどのように補償しますか?

private void Label_TextChanged(object sender, EventArgs e)
{
    Label label = sender as Label;

    if (label != null && label.Text.Length != 0)
    {
        SizeF size = new SizeF();
        using (Graphics g = label.CreateGraphics())
        {
            size = g.MeasureString(label.Text, label.Font);
        }

        Single x = (label.Width) / size.Width;
        Single y = (label.Height) / size.Height;
        Single scaler = x > y ? y : x;

        using (Font font = label.Font)
        {
            label.Font = new Font(font.Name, font.SizeInPoints * scaler);
        }
    }
}
4

2 に答える 2

3

これは簡単です。Graphics.MeasureString(...)を使用して、文字列に必要な幅を決定し、文字列に必要な幅がラベルの幅以下になるまで、フォントを徐々に小さくします。

于 2013-04-17T11:34:42.033 に答える
0

-event を使用してSystem.Windows.Forms.Label.TextChanged、文字列の長さを確認できます。

private void Label_TextChanged(object sender, EventArgs e){
    System.Windows.Forms.Label label = sender as label;
    if(label != null){
       //check text-length and if necessary resize it
    } 
}

イベントについてはこちらをご覧くださいTextChanged

FontHeightあなたのトリックを行うかもしれない - プロパティがあります。参考までにこちらをご覧ください。

System.Windows.Forms.Labelすべてが失敗した場合は、独自のカスタム ラベルから派生して作成します。

于 2013-04-17T11:35:18.117 に答える