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

此文转载自博客园 [huobaby]【 原文戳这里 】

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

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

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

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

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

  MSDN说:戳这里吧

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

你可能感兴趣的:(.NET/C#,AutoWordSe,RichTextBo,自动选词功能)