2011-11-07 4 views
2

"font1"が正規のものであるにもかかわらず、 "result1"と "result2"変数の値(文字列の測定幅)は同じです。 「font2」は太字である。興味深いことに、このエラーは "Times New Roman"と "Arial"というフォントで表示されます。たとえば、フォント "Calibri"の戻り値が正しい場合、変数 "result2"の値は変数 "result1"の値よりも大きくなります。なぜこうなった?MeasureStringでArialとTimes New Romanのフォントスタイルが無視されます

using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero)) 
{ 
    graphics.PageUnit = System.Drawing.GraphicsUnit.Pixel; 
    graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 
    System.Drawing.Font font1 = new System.Drawing.Font("Arial", 10.0f, System.Drawing.FontStyle.Regular); 
    System.Drawing.Font font2 = new System.Drawing.Font("Arial", 10.0f, System.Drawing.FontStyle.Bold); 
    float result1 = graphics.MeasureString("WWW", font1, int.MaxValue, System.Drawing.StringFormat.GenericTypographic).Width; 
    float result2 = graphics.MeasureString("WWW", font2, int.MaxValue, System.Drawing.StringFormat.GenericTypographic).Width; 
} 
+1

あなたは実際に同じ幅を持っていないと確信していますか? ArialとArial Boldを含むMicrosoft Wordで「WWW」と入力すると、同じ幅を持つように見えます。 – Jacob

+0

私は 'MeasureString'に問題がありました。代わりに 'TextRenderer'を使って文字列の幅を測定します。同様に 'Size textSize = TextRenderer.MeasureText("こんにちは! "、新しいフォント(" Arial "、12.0F);)'。 –

答えて

2

。 「WWW」は大胆なスタイルの有無にかかわらず同じ長さであると思います。エディターで試してみると、同じサイズのものが表示されます。

+0

実際、返された値は正しいです、エラーは後の計算で、私の見落とし、あなたの助けに感謝しました。 –

3

実際のOnPaint()メソッドでそれを描き、なぜあなたはわかります。私はちょうど別の文字列でそれを試してみましたが、幅は変更しない

enter image description here

関連する問題