关闭 RichTextBox 中 AutoWordSelection 的自动选词功能

最近用到RichTextBox做一个文档;发现 RichTextBox 一个很“智能"的功能!怎么说呢!

比如有一段文字” Hello Huobaby,Nice to me you!“

我让你选择” Hello“ 中的 ”o“ 和 ”Huobaby“ 中的时候,你是选择不到的,系统会很聪明的帮你把 ”Hello Huobaby“全都选择了;

据说这是优化个的功能,有时候真的很方便,但有时候也很让人头疼啊!

 

因为我的文档用不到这个功能,ok!把这个功能关掉吧!但问题来了……

MSDN说:http://technet.microsoft.com/zh-cn/library/system.windows.forms.richtextbox.autowordselection(en-us,VS.85).aspx

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);
         }
     }
 

 

 

 

posted on 2012-08-09 23:32  huobaby  阅读(1153)  评论(0编辑  收藏  举报