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#集合中的Add與AddRange方法
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)相同的範圍(即在同一個類中)。也就是意味著基類與派生類之間的成員函數不存在重