ほとんどのテキスト処理ツールに見られる機能である、winforms の複数行テキスト ボックスに、印刷できない文字 (スペース、改行) を表示しようとしています。
私はこれをやっています
textbox.Text.Replace(' ','·').Replace(Environment.NewLine, "¶" + Environment.NewLine);
これは今のところ問題なく動作しますが、スペースがないため、自動ワード ラップが機能しなくなりました。そのため、各行の長さを測定して単語の折り返しを手動で追加しようとしましたが、望ましい結果が得られません。
private int GetTextWidth(TextBox tb)
{
using (var g = textBox1.CreateGraphics())
{
SizeF size = g.MeasureString(tb.Text, tb.Font);
int width = (int)(size.Width + 0.5);
return width;
}
}
GetTextWidth は、文字ごとに異なる結果を返します。「l」の行を入力すると、GetTextWidth == textbox.Width が ~80% 後に到達し、「M」で GetTextWidth == textbox.Width の前でも改行が発生します。
等幅フォントの使用はオプションではありません。