GDI を使用してテキスト ボックスからテキストを描画しています。ただし、GDIで描画しているのと同じ量のスペースを反映するようにテキストボックスを作成しようとしています。したがって、GDI の幅の X 量については、テキスト ボックス内の文字列の長さがこの幅を超えないようにしたいと考えています。
GDI で文字列を描画するには、次を使用しています。
Font font = new Font("Lucidia Console", 8, GraphicsUnit.Point);
StringFormat sf = (StringFormat)StringFormat.GenericTypographic.Clone();
g.DrawString(textFromTextbox, font, Brush, layoutRect, sf);
テキストボックスに関しては、文字が入力されると文字列を測定します。
Font font = new Font("Lucidia Console", 8, GraphicsUnit.Point);
Size lineSize = TextRenderer.MeasureText(textbox.Text, font);
Size charSize = TextRenderer.MeasureText(e.KeyChar.ToString(), font);
if( charSize + lineSize > MAX_LINE_SIZE )
//Other stuff;
Lucidia Console 8ptをフォントとして使用したテキストボックス自体もあります。
そのため、問題は、GDIで描画している幅と同じ幅のX幅のテキストボックスを作成することになります。
グリフ、em サイズとピクセルの比率、およびその他のトピックについてあらゆる種類の議論に出くわしましたが、解決策はほとんどありません。
何か案は?