C#RichTextBox[自动选词]与[生僻字显示]问题
来源:互联网 发布:阿里云幕布ps能过么 编辑:程序博客网 时间:2024/06/08 14:44
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显示特殊字符的问题
转载请注明以上两位作者出处,尊重原创!!
0 0
- C#RichTextBox[自动选词]与[生僻字显示]问题
- c# winform richTextBox 自动显示最后一行
- c# winform richTextBox 自动显示最后一行
- jsp 生僻字 显示
- 关闭 RichTextBox 中 AutoWordSelection 的自动选词功能
- RichTextBox实现关键字自定义颜色显示(C#)
- RichTextBox实现关键字自定义颜色显示(C#)
- RichTextBox实现关键字自定义颜色显示(C#)
- Winforms:RichTextBox显示特殊字符的问题
- 生僻字及编码问题
- 生僻字编码问题
- C#richtextbox控件插入行问题
- C#RichTextBox全角问题!!忽略的KatakanaHalf!!
- C#RichTextBox 文本查找与替换
- C#RichTextBox与TextBox换行区别
- C# richTextBox 换行 显示水平滚动条 取消自动换行
- C# richTextBox 换行 显示水平滚动条 取消自动换行
- MySQL生僻字无法显示解决方法
- 黑马程序员-Java 多线程(一)-线程的创建、状态、安全性
- 黑马程序员-Java 多线程(二)-线程的同步、死锁、Lock接口
- Padres 之broker socket 连不上问题
- [Leetcode] Add Digits
- 做你不想做的事你可能会失败,还不如给自己一个机会做你爱做的事。 –金‧凯瑞
- C#RichTextBox[自动选词]与[生僻字显示]问题
- How do I remap certain keys or devices?
- 关于民族危机感的重要性
- Some code about copying from a file to another
- 人要时刻保持危机感
- ubuntu shortcuts
- Codeforces Round #330 (Div. 2) A. Vitaly and Night(模拟)
- 多态和继承的区别
- Codeforces Round #330 (Div. 2) B. Pasha and Phone(容斥原理)