要新做一个TextBox,使得自已可以控制它的换行。
例如:这是一个测试用的文本。
在输入到TextBox时如果超过了宽度,则会自动换行。(软换行)
可能会出现如下视图:
[
这是一个
测试用的
文本。
]
由于是软换行,我删除其中一个字后会重新布局,比如删除第一个字“这”就呈现如下:
[
是一个测
试用的文
本。
]我现在要实现一个特殊的要示要能自定义换行方式。比如 “测试” 两个字不能折分
上面的就成了
[
是一个
测试用的
文本
]我重写了OnPaint函数
其中有以下代码(部分),其中printedText,是在OnTextChanged中算出来的每行打印的文本:foreach (object item in printedText)
{
                string str = item.ToString();                e.Graphics.DrawString(item.ToString(), this.Font, drawBrush, printPoint);
                float fontHeight = e.Graphics.MeasureString(str, this.Font).Height;                   printPoint.Y += (int)fontHeight;
}但出来的效果并不是很好,在用户输入的时候,不知在哪个功能里面实现了把文本绘制出来了(并非OnPaint中),从而导致
与OnPaint中的字体高度有点偏差,在输入多行后,光标的位置出现偏移。请高手赐解!

解决方案 »

  1.   

    我想不管用什么控件都必须解决输入这个问题。因此如果用用户控件还得在上面放一个TextBox的扩展类才行。
      

  2.   

    TextBox本身不能软换行吗???再说TextBox是Windows标准控件,里面的字是由Windows绘制的。一般来说是无法控制的!
      

  3.   

    我觉得这行可能有问题
    printPoint.Y += (int)fontHeight; 
    因为每次你得到的字体高度如果不正好是整数,那么化为整数的时候就丧失了一部分精度,高度就缩短了,你不妨试试把字体高度设置为整数,这样精度就没有损失,看一下会不会偏差
      

  4.   

    我用用户空间作过,很好实现的,只要对textBox1的属性进行操作就可以实现了
      

  5.   

    "再说TextBox是Windows标准控件,里面的字是由Windows绘制的。一般来说是无法控制的!"现在的目的就是要自已完全控制。[自已顶下]
      

  6.   


    现在的目的就是要自已完全控制。 那就不要用TextBox,自己画控件,从Control继承。