【问题标题】:WinForms RichTextBox infinite horizontal scroll bugWinForms RichTextBox 无限水平滚动bug
【发布时间】:2016-12-20 01:06:14
【问题描述】:
放置在表单上的常规RichTextBox 元素会出现一个错误,即使用鼠标(水平滚动中间按钮或触摸板)向右水平滚动会一直持续并且永不停止。即使RichTextBox 仅包含一个很适合其边界的单词并且滚动条被禁用,情况也是如此。
我从 .NET 2.0 开始就遇到了这个错误,并认为它会在某个时候得到修复,但我仍然在带有 .NET 4.6 的 Windows 10 上看到它。
让我感到困惑的是,我在 SO 或互联网上的其他地方找不到任何对此的参考。以前有没有人遇到过这种情况,有没有人知道如何防止这种奇怪的行为?
【问题讨论】:
标签:
.net
winforms
richtextbox
【解决方案1】:
这似乎是由 .NET 使用旧版本的 Win32 富编辑控件引起的,该控件已十年以上未更新。
解决方案是覆盖通过覆盖 CreateParams 属性并指定较新版本来创建的富编辑控件的版本:
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 http://stackoverflow.com/q/41233421/17027
//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;
}
}
}