我自己的编辑器C#中的用户控件

时间:2011-03-03 16:58:36

标签: c# winforms

我有一个图片框,我使用过这种方法:

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

3 个答案:

答案 0 :(得分:1)

请注意,传递给CreateCaret的尺寸以像素为单位。大概是你的字体高度等等。

另请注意,当控件失去焦点时应创建插入符号,然后在控件失去焦点时将其删除。一次应该只有一个插入符号,因此当焦点转到另一个窗口(该窗口可能需要插入符号)时保持一个插入符不正确。

答案 1 :(得分:0)

我首先想到的是,由于MeasureString如何对抗各个角色,因此看起来像是等宽的。

跟踪整个字符串,每次按键添加并重新绘制/测量插入位置,而不是每个字符。

答案 2 :(得分:0)

要记住的一件事是Graphics.MeasureString()会给你一个不同的结果TextRenderer.MeasureText()

通常,您需要使用TextRenderer版本。