1

TextAlign プロパティが MiddleCenter に設定された通常のラベルがあります。ラベルは、分と秒の時間値を保持することを目的としており、ストップウォッチとして機能します。

フォント サイズが小さい場合、ラベルは垂直方向に正しく配置されます。ただし、フォントサイズが大きくなると、縦方向の配置が問題になります...

ここのスクリーンショットを見ると、私が何を意味するかがわかります。

スクリーンショット

私が理解している限りでは、.NET は技術的には正しいと思います。フォントの上昇や下降などのために、印刷上の意味から垂直方向の配置は正しいと思います。ただし、この場合、これは私のニーズにはあまり合いません。スクリーンショットでは、ラベルの上部にラベルの下部よりも多くのスペースがあります。数字が表示されるときに、これら2つの部分が等しくなるようにしたいと思います。私は数字とコロンのみを使用しているので、ベースラインの下に明らかにピクセルがぶら下がっている「g」などの他の文字が含まれている場合にどのように見えるかについては興味がありません。

この動作を強制するためにパディングを微調整しようとしましたが、テキストが切り取られただけで、.NET では負のパディング/マージンを使用できません。私がここでやりたいことを達成する簡単な方法はありますか? また、ttf フォント ファイルを手動で編集し、フォントの上昇/下降を変更して、.NET が異なる位置に配置されるようにしましたが、それを把握できませんでした。アドバイスありがとうございます。

私が使用しているフォント ファイルは、 http ://www.fontspace.com/style-7/digital-7 からダウンロードしたものです。

4

1 に答える 1

0

比率が大きすぎると、テキストが「沈み」、最終的には途切れてしまうようです。

Form ResizeEnd イベントでこれを試してください:

    label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
    //First make the font big enough
    double fontSize = label1.Width / label1.Text.Count();
    int height = label1.Height;
    fontSize = fontSize > 0 ? (double)fontSize : 1;
    if (fontSize < (height / 2))
    {
        fontSize = (height / 2);
    }
    label1.Font = new System.Drawing.Font(label1.Font.FontFamily, (float)fontSize, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

    //then adjust the text to the label size
    while (label1.Width < System.Windows.Forms.TextRenderer.MeasureText(label1.Text,
        new Font(label1.Font.FontFamily, label1.Font.Size, label1.Font.Style)).Width ||
        label1.Height < System.Windows.Forms.TextRenderer.MeasureText(label1.Text,
        new Font(label1.Font.FontFamily, label1.Font.Size, label1.Font.Style)).Height)
    {
        label1.Font = new Font(label1.Font.FontFamily, label1.Font.Size > 1 ? label1.Font.Size - 0.5f : label1.Font.Size, label1.Font.Style);
        if (label1.ClientRectangle.Width < 3 || label1.ClientRectangle.Height < 3)
            break;
    }

これを変更しました: https://stackoverflow.com/a/9645577/1027551

于 2012-10-06T19:41:29.347 に答える