此文转载自博客园 [huobaby]【 原文戳这里 】
最近用到RichTextBox做一个文档;发现 RichTextBox 一个很“智能”的功能!怎么说呢!
比如有一段文字” Hello Huobaby,Nice to me you!“
我让你选择” Hello“ 中的 ”o“ 和 ”Huobaby“ 中的时候,你是选择不到的,系统会很聪明的帮你把 ”Hello Huobaby“全都选择了;
据说这是优化个的功能,有时候真的很方便,但有时候也很让人头疼啊!
因为我的文档用不到这个功能,ok!把这个功能关掉吧!但问题来了……
RichTextBox.AutoWordSelection 属性:获取或设置一个值,通过该值指示是否启用自动选择字词。
如果启用自动选择字词,则为 true;否则为 false。默认为 true。
但问题就是这样:不管我设置 为 true 还是 false 自动选择字词功能还是无法关掉!这个真的”智能“啊!
好吧,吐槽完毕!下面是解决方案!
方案1:
度娘上说:把 RichTextBox.AutoWordSelection = false ;放到 Form1_Load 中可以关闭!至于为什么,不是很清楚!
private void Form1_Load(object sender, EventArgs e)
{
richTextBox1.AutoWordSelection = false;
}
方案2:
方案1,的确可以把自动选词功能关闭了,但该方案只能把RichTextBox 控件拖放到Form是生效;
但如果用代码动态生成 RichTextBox 就无能为力了!
那没办只能!只能对 RichTextBox 重写了!
class CustomRichTextBox : System.Windows.Forms.RichTextBox
{
public CustomRichTextBox()
{
this.AutoWordSelection = false;
this.Font = new System.Drawing.Font("Courier New", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
}
private bool _Selecting = false;
private int _StartPosition = 0;
protected override void OnMouseMove(System.Windows.Forms.MouseEventArgs e)
{
if (_Selecting)
{
int charPosition = base.GetCharIndexFromPosition(new System.Drawing.Point(e.X, e.Y));
int length = 0;
if (charPosition >= _StartPosition)
{
length = charPosition - _StartPosition + 1;
this.Select(_StartPosition, length);
}
else
{
length = _StartPosition - charPosition;
this.Select(charPosition, length);
}
}
base.OnMouseMove(e);
}
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
this._Selecting = true;
_StartPosition = base.GetCharIndexFromPosition(new System.Drawing.Point(e.X, e.Y));
base.OnMouseDown(e);
}
protected override void OnMouseUp(System.Windows.Forms.MouseEventArgs e)
{
this._Selecting = false;
base.OnMouseUp(e);
}
}