要新做一个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中的字体高度有点偏差,在输入多行后,光标的位置出现偏移。请高手赐解!
例如:这是一个测试用的文本。
在输入到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中的字体高度有点偏差,在输入多行后,光标的位置出现偏移。请高手赐解!
printPoint.Y += (int)fontHeight;
因为每次你得到的字体高度如果不正好是整数,那么化为整数的时候就丧失了一部分精度,高度就缩短了,你不妨试试把字体高度设置为整数,这样精度就没有损失,看一下会不会偏差
现在的目的就是要自已完全控制。 那就不要用TextBox,自己画控件,从Control继承。