1. 程式人生 > >關閉 RichTextBox 中 AutoWordSelection 的自動選詞功能

關閉 RichTextBox 中 AutoWordSelection 的自動選詞功能

此文轉載自部落格園 [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); } }