关闭 RichTextBox 中 AutoWordSelection 的自动选词功能
最近用到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 重写了!
public 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); } }