關閉 RichTextBox 中 AutoWordSelection 的自動選詞功能
阿新 • • 發佈:2019-01-21
此文轉載自部落格園 [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);
}
}