1. 程式人生 > >C#RichTextBox[自動選詞]與[生僻字顯示]問題

C#RichTextBox[自動選詞]與[生僻字顯示]問題

  RichTextBox 的自動選詞原系統設定預設開啟的,如果我們有一個字串為:“string陣列”,想要選擇“g數”這個字元時,RichTextBox已經為我們選擇了“string數”字元。

  想要關閉自動選詞,在[設計]AutoWordSelection屬性設定是沒辦法關閉的,這算一個小BUG吧。

只能如下面這樣才可以關閉。

private void Form1_Load(object sender, EventArgs e)
{
      richTextBox1.AutoWordSelection = false;
}

  生僻字(或特殊符號),很多時候都用不到,像這樣這裡寫圖片描述
  這兩個字都變成����了。
  這些我們都需要用到重寫方法。
  

using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.IO;

namespace 空間名
{
    public partial class EsRichTextBox : RichTextBox
    {

        #region =☆=*=☆=自定義變數=☆=*=☆=
        const string DLL_RICHEDIT = "msftedit.dll";
        ///
<summary>MSFTEDIT.DLL(即RichEdit4.1版本)註冊的類名是"RICHEDIT50W"</summary>
const string WC_RICHEDITW = "RICHEDIT50W"; /// <summary>用於表示指標或控制代碼的平臺特定型別。</summary> private IntPtr moduleHandle; /// <summary>獲取或設定一個值,通過該值指示是否嘗試載入。</summary> private
bool attemptedLoad; /// <summary>獲取或設定一個值,通過該值指示是否按下滑鼠。</summary> private bool _Selecting = false; /// <summary>獲取或設定一個值,通過該值指示按下滑鼠時的位置。</summary> private int _StartPosition = 0; /// <summary> 載入庫 </summary> /// <param name="libname">檔案路徑</param> /// <returns></returns> [DllImport("Kernel32.dll")] internal static extern IntPtr LoadLibrary(string libname); #endregion #region =☆=*=☆= 系統建構函式 =☆=*=☆= public EsRichTextBox() { InitializeComponent(); } public EsRichTextBox(IContainer container) { container.Add(this); InitializeComponent(); moduleHandle = IntPtr.Zero; attemptedLoad = false; AutoWordSelection = false;//關閉自動選字詞 Font = new System.Drawing.Font( "宋體", 11.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); } #endregion #region =☆=*=☆=重寫控制元件資訊=☆=*=☆= /// <summary>重寫控制元件的資訊</summary> protected override CreateParams CreateParams { get { CreateParams cp = base.CreateParams; AttemptToLoadNewRichEdit(); if (moduleHandle != IntPtr.Zero) { cp.ClassName = WC_RICHEDITW; } return cp; } } /// <summary>嘗試載入新的豐富的編輯(RichEdit)資訊</summary> void AttemptToLoadNewRichEdit() { // 檢索動態庫連結 if (!attemptedLoad) { attemptedLoad = true; string strFile = Path.Combine(Environment.SystemDirectory, DLL_RICHEDIT); moduleHandle = LoadLibrary(strFile); } } #endregion #region =☆=*=☆=重寫滑鼠事件=☆=*=☆= /// <summary>重寫滑鼠移過元件發生事件</summary> /// <param name="e">滑鼠點選事件</param> //protected override void OnMouseMove(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; // Select(_StartPosition, length); // } // else // { // length = _StartPosition - charPosition; // Select(charPosition, length); // } // } // base.OnMouseMove(e); //} /// <summary>重寫滑鼠按下事件</summary> /// <param name="e">滑鼠點選事件</param> protected override void OnMouseDown(MouseEventArgs e) { _Selecting = true; AutoWordSelection = false;/* 關閉自動選字詞 此項必須 */ _StartPosition = base.GetCharIndexFromPosition(new System.Drawing.Point(e.X, e.Y)); base.OnMouseDown(e); } /// <summary>重寫滑鼠釋放事件</summary> /// <param name="e">滑鼠點選事件</param> protected override void OnMouseUp(MouseEventArgs e) { AutoWordSelection = false;/* 關閉自動選字詞 此項必須 */ _Selecting = false; base.OnMouseUp(e); if (_Selecting) { int charPosition = base.GetCharIndexFromPosition(new System.Drawing.Point(e.X, e.Y)); int length = 0; if (charPosition > _StartPosition) { length = charPosition - _StartPosition; Select(_StartPosition, length); } else if (charPosition < _StartPosition) { length = _StartPosition - charPosition; Select(charPosition, length); } } } #endregion } }

測試的時間,重寫的滑鼠移動事件使選中的時候一直閃爍,所以把事件內容移到滑鼠釋放事件中。
以上程式碼根據 [部落格園-huobaby]
關閉 RichTextBox 中 AutoWordSelection 的自動選詞功能
[CSDN-cadcisdhht-何海濤的專欄]
RichTextBox顯示特殊字元的問題
轉載請註明以上兩位作者出處,尊重原創!!

相關推薦

C#RichTextBox[自動][生僻顯示]問題

  RichTextBox 的自動選詞原系統設定預設開啟的,如果我們有一個字串為:“string陣列”,想要選擇“g數”這個字元時,RichTextBox已經為我們選擇了“string數”字元。   想要關閉自動選詞,在[設計]AutoWordSelectio

關閉 RichTextBox 中 AutoWordSelection 的自動功能

此文轉載自部落格園 [huobaby]【 原文戳這裡 】   最近用到RichTextBox做一個文件;發現 RichTextBox 一個很“智慧”的功能!怎麼說呢!   比如有一段文字” Hello Huobaby,Nice to me you!“   

C#實現漢字轉拼音(包括生僻)

專案裡面有一個功能是將使用者的名字轉變成拼音全拼,但是在使用過程中,有很多人的名字是生僻字,程式根本找不到那個字的拼音,後來看程式碼才發現,轉拼音這個類居然是將一個個的漢字列舉的: 且不說這樣列舉會增加多大的工作量,光這漢字之多,能列舉的完嗎? 後來看了一些資料並借鑑了前

全文檢索Lucene(三)--中文分高亮顯示

一、中文分詞smartcn 二、檢索結果高亮顯示實現        首先,建立maven專案,新增相關依賴。<dependencies> <dependency> <groupId>org.apache.lucene</g

SQLServer特殊字元/生僻varchar

對於中文版的SQL SERVER,預設安裝後使用的預設排序規則為Chinese_PRC_CI_AS,在此排序規則下,使用varchar型別來可以“正常存取”存放中文字元以及一些東南亞國家的字元,同時varchar型別在存放英文字元和數字時比nvarchar節省一半的儲存空間,因此很多DBA都習慣

C# 可引數命名實參

Demo  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Option

Android VideoView 自動播放重播,點暫停繼續

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //set no title bar

C++11:自動型別推導型別獲取

auto 話說C語言還處於K&R時代,也有auto a = 1;的寫法。中文譯過來叫自動變數,跟c++11的不同,C語言的auto a = 1;相當與 auto int a = 1;語句。 而C++11的auto是有著嚴格的型別推匯出來的。以前是這麼寫

unicode最近火的歌曲《生僻

漢字 信息 方式 什麽 lock 通信 中漢字 一個 的人 unicode中漢字或其他字符不會死,很可能會從另外一種方式獲得重生。 煢煢孑立 沆瀣一氣 踽踽獨行 醍醐灌頂 綿綿瓜瓞 奉為圭臬 龍行龘龘 犄角旮旯 娉婷裊娜 涕泗滂沱 呶呶不休 不稂不莠

C#RichTextBox 文字查詢替換

〖歡迎轉載〗轉載請註明出處 把 查詢,替換,全部替換 三個button 的 Enabled 設定為 false ,f替換內容TextBox   Enabled 也設定為false , CheckBox2 為選中.... 在主窗體中 關聯一個函式就可以了,主窗體關聯如下:

C# RichTextBox的一些操作:自動換行 設定行間距 調整字型

最近用到richtextbox,一些操作記錄在下面: 1 禁止自動換行   richtextbox1.WordWrap = false;   wordwrap 屬性:指示多行文字控制元件是否在必要時自動換到下一行的開始處; 2 調整字型大小   richtextbox.F

C/C++筆記001(printf()轉義符)

中國 超過 中間 pan 斜杠 書寫 十六進制 出了 use 一 控制臺輸出函數: printf(format,...) -------format 書寫形式: "整數x=%d,整數y=%d,浮點數%f" -------... 參數,中間用 ","分隔 int ma

C 對象JSON符串互相轉換的幾種方式

pty reader font clear time nor one returns type 隨著 Rest 風格 API 的應用越來越廣泛,對象與JSON字符串互相轉換的功能也用的越來越多。這裏介紹三種方法,期中兩種為DotNet Framework .NET 3.

標簽如何顯示藥品生僻、特殊圖標?上海瀚示燈光揀系統在智能藥房的應用

智能 vpd 等等 擁有 聯網 方案 sha mage 特性 行業現狀:藥品存放特殊性,造成許多醫藥庫房管理難點,解決疑難所需要更智能的庫房管理系統。簡便直觀的錄入,方便迅速的查詢,靈活的分類統計商品的信息化管理,各方面都需顧及。醫藥貨品規格及存放方式參差不齊,麻醉類、劇毒

MySQL生僻插入失敗的處理方法

mysql生僻字插入失敗的處理方法最近,業務方反饋有個別用戶信息插入失敗,報錯提示類似"Incorrect string value:"\xF0\xA5 ..... " 看這個提示應該是字符集不支持某個生僻字造成的。下面是在虛擬機裏復現的場景:step1、模擬原始表結構字符集環境:use test;CRE

JS截取分割符串

var syn cti 空字符串 borde 分割 border cells contain substr 方法 返回一個從指定位置開始的指定長度的子字符串。 stringvar.substr(start [, length ]) start :必選項。所需的子字符串的起始

Python_符串的映射可變符串的應用

ble 實現 replace code 數字 sdi 插入字符 pytho 查看 1 ‘‘‘ 2 maketrans()、translate() 3 maketrans()方法用來生成字符映射表,而translate()方法則按映射表中定義的對應關系轉換並替換其中的

C++雜談三產生隨機數time函數

.com jca nis quest pex bit pst cap die %5Bdjango%5D%E8%A1%A8%E6%A0%BC%E7%9A%84%E6%B7%BB%E5%8A%A0%E4%B8%8E%E5%88%A0%E9%99%A4%E5%AE%9E%E4%B

C#集合中的AddAddRange方法

dog enqueue 參考資料 array style 添加 soft uic tar C#.NET的集合主要位於System.Collections和System.Collections.Generic(泛型)這兩個namespace中。 1、System.Collec

C++重載、覆蓋隱藏關系

註意 tar soft 範圍 span rtu 類函數 href 不存在 在C++中,成員函數的重載、覆蓋與隱藏是很容易混淆的概念,一定要搞清楚他們之間的關系與差別。 1、成員函數重載的特性 (1)相同的範圍(即在同一個類中)。也就是意味著基類與派生類之間的成員函數不存在重