C# RichTextBox选择突出显示
是否有可能在用户选择后,每个选定的字母都显示其原始颜色?而且不总是默认的白色 我想实现这样的目标 你可以在写字板上看到C# RichTextBox选择突出显示,c#,.net,winforms,selection,richtextbox,C#,.net,Winforms,Selection,Richtextbox,是否有可能在用户选择后,每个选定的字母都显示其原始颜色?而且不总是默认的白色 我想实现这样的目标 你可以在写字板上看到 您可以使用最新版本的RICHEDIT50W,而不是在RichTextBox中看到的,为此,您应该从标准RichTextBox继承并重写CreateParams,并将ClassName设置为RICHEDIT50W: 代码 using System; using System.ComponentModel; using System.Runtime.InteropServices;
您可以使用最新版本的
RICHEDIT50W
,而不是在RichTextBox
中看到的,为此,您应该从标准RichTextBox
继承并重写CreateParams
,并将ClassName
设置为RICHEDIT50W
:
代码
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class ExRichText : RichTextBox
{
[DllImport("kernel32.dll", EntryPoint = "LoadLibraryW",
CharSet = CharSet.Unicode, SetLastError = true)]
private static extern IntPtr LoadLibraryW(string s_File);
public static IntPtr LoadLibrary(string s_File)
{
var module = LoadLibraryW(s_File);
if (module != IntPtr.Zero)
return module;
var error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
try
{
LoadLibrary("MsftEdit.dll"); // Available since XP SP1
cp.ClassName = "RichEdit50W";
}
catch { /* Windows XP without any Service Pack.*/ }
return cp;
}
}
}
屏幕截图
注意:
- 多亏了这个古老而有用的VisualStudio工具,我可以使用Spy++看到写字板的RichTextBox类
- 如果操作系统中的
有任何问题,可以打开RICHEDIT50W
和Spy++
,然后选择它的WordPad
,查看类名RichTextBox
- 当我搜索如何将
类应用于我的控件时,我找到了@Elmue的伟大帖子,多亏了他RICHEDIT50W
using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Windows.Forms;
[DesignerCategory("Code")]
public class RichTextBox5 : RichTextBox
{
[DllImport("kernel32.dll", EntryPoint = "LoadLibraryW", CharSet = CharSet.Unicode, SetLastError = true)]
private static extern IntPtr LoadLibraryW(string s_File);
private static readonly object libraryLoadLock = new object();
private static bool libraryLoadFlag;
public static IntPtr LoadLibrary(string s_File)
{
var module = LoadLibraryW(s_File);
if (module != IntPtr.Zero)
{
return module;
}
var error = Marshal.GetLastWin32Error();
throw new Win32Exception(error);
}
protected override CreateParams CreateParams
{
get
{
var cp = base.CreateParams;
try
{
lock (libraryLoadLock)
{
if (!libraryLoadFlag)
{
LoadLibrary("MsftEdit.dll"); // Available since XP SP1
libraryLoadFlag = true;
}
}
cp.ClassName = "RichEdit50W";
}
catch { /* Windows XP without any Service Pack.*/ }
return cp;
}
}
}
很抱歉以这种方式回答,但由于信誉点数不足,我只能发布一个答案。我知道热可以给不同的部分上色,但我希望在选择时看到它。
richTextBox1.SelectionColor=System.Drawing.color.Red代码>也许当你选择颜色时,你会用它来改变。不,它不是这样工作的。如果没有选择,它将更改所选文本或当前插入符号位置的文本的颜色,但在选择时不会影响文本的颜色。您称之为哪个事件?也许你在挑选的时候没有提神。我想你不明白我的意思。我不需要调用事件,因为这只是我按编程方式进行的选择。所以我只是选择-仅此而已。更重要的是,没有必要提神。请仔细阅读我的问题。选择后更改选择文本效果良好。在选择时,选择文本的颜色始终为白色,就像在我附加的屏幕上一样。非常感谢!现在,选择时颜色的可见性非常好@Reza Aghaei,我该把这门课放在我的项目中的什么地方?因为我在多个表单中使用richtextbox?当您将类添加到项目中时,如果关闭所有设计器并重新生成项目,ExRichText
将出现在工具箱中,您可以将其放到表单上。@Reza Aghaei,但当我将其拖动到用户控件时,会出现以下错误:,能告诉我怎么解决吗?RichEditBox的7.0或8.0版有什么好运气吗?