1

C# TextMetrics プロパティがどのように機能するかわかりません。以下の例は、どこかで見つけて少し変更したものですが、テキストボックスに設定したフォントに関係なく、結果は 7 のようです。

TextMetrics metrics;
VisualStyleRenderer renderer = new VisualStyleRenderer(VisualStyleElement.TextBox.TextEdit.Normal);
using (IDeviceContext context = textBox1.CreateGraphics() as IDeviceContext)
{
    metrics = renderer.GetTextMetrics(context);
}
int averageWidth = metrics.AverageCharWidth;
textBox1.Text = averageWidth.ToString(); // 7

MSDN には例がありません。また、他の Web サイトでもわかりやすい例は見つかりませんでした。誰かがこれがどのように機能するか説明できますか?

PS: すべての TextMetrics プロパティを使用したいです。AverageCharWidth だけではありません。

更新: プライベート フォント コレクションを使用して、フォント ビューアを作成しています。各フォントについてできるだけ多くの情報を取得したいと考えています。次に、フォント ビューアーに含めるのに役立つものとそうでないものを決定します。

私のフォント ビューアは Bitstream Font Navigator ( http://noscope.com/2004/font-management-solution/ ) を思い起こさせますが、フォントに関する詳細情報を含めたいと思います。

更新:Olivier Jacot-Descombes が彼の回答で指摘しているように、FontFamily メソッドを使用してその情報の一部を取得できますが、すべてではありません。PitchAndFamily、MaxCharWidth、AverageCharWidth などの情報を取得するには、TextMetrics を使用する必要があると思います。または、この情報を取得する他の簡単な方法はありますか?

4

1 に答える 1

3

このようなフォントメトリックを取得できます

var font = new System.Drawing.Font("Arial", 11f);
var style = System.Drawing.FontStyle.Regular;
var ff = font.FontFamily;
int ascent = ff.GetCellAscent(style);
int descent = ff.GetCellDescent(style);
int height = ff.GetEmHeight(style);
int lineSpacing = ff.GetLineSpacing(style);
float pointSize = font.SizeInPoints;

詳細については、MSDNの「方法: フォント メトリックを取得する」を参照してください。

于 2013-02-06T17:05:24.273 に答える