111,098
社区成员




using System;
using System.ComponentModel;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace 文件加载速度测试
{
public partial class ExRichTextBox : 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
public ExRichTextBox()
{
InitializeComponent();
moduleHandle = IntPtr.Zero;
attemptedLoad = false;
AutoWordSelection = false;//关闭自动选字词
Font = new System.Drawing.Font(
"宋体", 12.0F, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, 0);
/* 文本中出现‘西方语言’用西方字体显示,出现‘亚洲语言’则用亚洲字体显示 */
this.LanguageOption = RichTextBoxLanguageOptions.DualFont;
ShowSelectionMargin = true;
ImeMode = ImeMode.On;
}
public ExRichTextBox(IContainer container)
{
container.Add(this);
InitializeComponent();
moduleHandle = IntPtr.Zero;
attemptedLoad = false;
AutoWordSelection = false;//关闭自动选字词
Font = new System.Drawing.Font(
"宋体", 12.0F, System.Drawing.FontStyle.Regular,
System.Drawing.GraphicsUnit.Point, 0);
ShowSelectionMargin = true;
ImeMode = ImeMode.On;
}
#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 OnMouseDown(MouseEventArgs e)
{
_Selecting = true;
_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
}
}
string str2 = @"D:\Documents\五笔词库20160202.txt";
private void button1_Click(object sender, EventArgs e)
{
exRichTextBox1.Text = File.ReadAllText(str2, Encoding.Default);
//exRichTextBox1.Lines = File.ReadAllLines(str2, Encoding.Default);
}
private void button2_Click(object sender, EventArgs e)
{
exRichTextBox1.Clear();
}
/// <summary>尝试加载新的富文本编辑(RichEdit)信息</summary>
void AttemptToLoadNewRichEdit()
{
// 检索动态库链接
if (!attemptedLoad)
{
attemptedLoad = true;
string strFile = Path.Combine(Environment.SystemDirectory, DLL_RICHEDIT);
moduleHandle = LoadLibrary(strFile);
}
}