画面にテキストをレイアウトできるコードを完成させようとしています。それ以外の場合は空の Windows フォームのイベント ハンドラーに配置された次の C# コードPaint
は、例です。
string[] s = new string[] { "Sample text ", "to test", " this layout ", "algorithm" };
PointF[] pts = new PointF[s.Length];
PointF start = new PointF(10, 10);
StringFormat f = new StringFormat(StringFormat.GenericTypographic);
float x = start.X;
float y = start.Y;
for (int i = 0; i < pts.Length; i++)
{
pts[i] = new PointF(x, y);
SizeF sz = e.Graphics.MeasureString(s[i], Font, pts[i], f);
x += sz.Width;
e.Graphics.DrawString(s[i], Font, Brushes.Black, pts[i]);
}
s
配列内の各テキストの前後の空白をトリミングすることを除いて、正しく機能します。次のように表示されます。
このレイアウト アルゴリズムをテストするサンプル テキスト
しかし、代わりに次のように表示されます。
このレイアウト アルゴリズムをテストするサンプル テキスト
f.Trimming
プロパティが に設定されていることを確認しましたNone
。これにより、文字列の測定に末尾と開始の空白が追加されると推測していましたが、それでもトリミングされます。MeasureString
メソッドに空白を含める方法についてのアイデアはありますか? それ以外の場合、カーニングは完全に処理されます。