我正在使用 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 作为字体。
所以,那么麻烦就变成了一个 X 宽度的文本框,它的宽度与我在 GDI 中绘制的宽度相同。
我遇到过关于字形、em-size/pixel ratios 和其他主题的各种讨论,但几乎没有解决。
有任何想法吗?