我有一个图片框,我使用过这种方法:
CreateCaret(pictureBox1.Handle,IntPtr.Zero,1,font.Height);
ShowCaret(pictureBox1.Handle);
现在我已经创建了插入符号。通过以下代码,我将在图片框上绘制:
gr = pictureBox1.CreateGraphics();
现在我已经使用此代码来测量字符宽度:
font = new Font("Arial", 20, GraphicsUnit.Pixel);
char_width = (int)gr.MeasureString("a", font).Width;
对于Form1_keypress:
if (e.KeyChar !=(char)Keys.Enter )
{
gr.DrawString(e.KeyChar.ToString(), font, Brushes.Black, caretpos.X, caretpos.Y);
caretpos.X += char_width;
}
但是角色之间的空间非常大,大约26个像素。我怎么能纠正这个?
这样的事情:
A B C D
答案 0 :(得分:1)
请注意,传递给CreateCaret的尺寸以像素为单位。大概是你的字体高度等等。
另请注意,当控件失去焦点时应创建插入符号,然后在控件失去焦点时将其删除。一次应该只有一个插入符号,因此当焦点转到另一个窗口(该窗口可能需要插入符号)时保持一个插入符不正确。
答案 1 :(得分:0)
我首先想到的是,由于MeasureString如何对抗各个角色,因此看起来像是等宽的。
跟踪整个字符串,每次按键添加并重新绘制/测量插入位置,而不是每个字符。
答案 2 :(得分:0)
要记住的一件事是Graphics.MeasureString()
会给你一个不同的结果TextRenderer.MeasureText()
通常,您需要使用TextRenderer
版本。