WinForms RichTextBox 无限水平滚动错误
WinForms RichTextBox infinite horizontal scroll bug
放置在表单上的常规 RichTextBox
元素存在一个错误,其中使用鼠标(水平滚动中间按钮或触摸板)向右水平滚动会一直持续并且永不停止。即使 RichTextBox
只包含一个很容易进入其边界的单词并且滚动条被禁用,情况也是如此。
我 运行 从 .NET 2.0 开始就发现了这个错误,并认为它会在某个时候得到修复,但我仍然在 Windows 10 和 .NET 4.6 上看到它。
让我感到困惑的是,我在 SO 或互联网上的其他地方找不到对此的任何引用。以前有人 运行 参与过这个吗?有人知道如何防止这种奇怪的行为吗?
这似乎是由于 .NET 使用的 Win32 Rich Edit 控件的旧版本已十年以上未更新所致。
解决方案是通过覆盖 CreateParams
属性 并指定更新的版本来覆盖创建的 rich edit 控件的版本:
public partial class BetterRichTextBox : RichTextBox
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern IntPtr LoadLibrary(string lpFileName);
protected override CreateParams CreateParams
{
get
{
LoadLibrary("MsftEdit.dll");
//Use newer versions of the RTF control
//Fixes a lot of bugs, such as
//A list of versions and their DLL paths can be found at https://github.com/dpradov/keynote-nf/issues/530
CreateParams createParams = base.CreateParams;
createParams.ClassName = "RichEdit50W";
return createParams;
}
}
}
放置在表单上的常规 RichTextBox
元素存在一个错误,其中使用鼠标(水平滚动中间按钮或触摸板)向右水平滚动会一直持续并且永不停止。即使 RichTextBox
只包含一个很容易进入其边界的单词并且滚动条被禁用,情况也是如此。
我 运行 从 .NET 2.0 开始就发现了这个错误,并认为它会在某个时候得到修复,但我仍然在 Windows 10 和 .NET 4.6 上看到它。
让我感到困惑的是,我在 SO 或互联网上的其他地方找不到对此的任何引用。以前有人 运行 参与过这个吗?有人知道如何防止这种奇怪的行为吗?
这似乎是由于 .NET 使用的 Win32 Rich Edit 控件的旧版本已十年以上未更新所致。
解决方案是通过覆盖 CreateParams
属性 并指定更新的版本来覆盖创建的 rich edit 控件的版本:
public partial class BetterRichTextBox : RichTextBox
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
static extern IntPtr LoadLibrary(string lpFileName);
protected override CreateParams CreateParams
{
get
{
LoadLibrary("MsftEdit.dll");
//Use newer versions of the RTF control
//Fixes a lot of bugs, such as
//A list of versions and their DLL paths can be found at https://github.com/dpradov/keynote-nf/issues/530
CreateParams createParams = base.CreateParams;
createParams.ClassName = "RichEdit50W";
return createParams;
}
}
}