WinForms RichTextBox无限水平滚动bug

时间:2016-12-20 01:06:15

标签: .net winforms richtextbox

放置在表单上的常规RichTextBox元素表现出一个错误,即用鼠标水平向右滚动(水平滚动中间按钮或触摸板)会永远保持不变并永不停止。即使RichTextBox只包含一个易于插入其边界且滚动条被禁用的单词,也是如此。

我从.NET 2.0开始遇到这个bug,并且认为它会在某些时候被修复,但我仍然在使用.NET 4.6的Windows 10上看到它。

我得到的是,我在SO或其他地方找不到任何对此的引用。有没有人遇到过这个问题,有没有人知道如何防止这种奇怪的行为?

1 个答案:

答案 0 :(得分:0)

这似乎是由.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;
        }
    }
}