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;
        }
    }
}