.net 如何避免使用鼠标滚轮后RichTextBox ScrollBar自动滚动到上次选择的位置?

nafvub8i  于 2022-11-26  发布在  .NET
关注(0)|答案(1)|浏览(159)

bounty将在5天后过期。回答此问题可获得+50声望奖励。qakmak正在寻找标准答案

我正在Winform中使用RichTextBox控件。
最近我发现了一个奇怪的东西,像一个错误,我真的找不到一个方法来修复它。
1.我在Form中有一个RichTextBox
2.我点击并选择了RichTextBox中的某个地方。
3.我单击了桌面上的任何其他位置(仅针对DeactivateForm)。[重要]
4.然后我用鼠标滚轮把RichTextBox的滚动条改变到某个地方(但Form仍处于Deactivate状态)。
5.现在我用鼠标滚轮滚动后点击了RichTextBox,但是你会发现当前滚动条的位置变回了原来的位置。
这是用于显示详细信息的gif图像:

我真的希望新点击的地方会被选中,而滚动条不会改变到旧的选择位置。
有没有人知道为什么会发生这种情况?有没有办法解决这个问题?谢谢。

更新日期:

我想问题可能是因为RichTextBox中的光标,如果我们可以删除它,也许下次单击时它不会回到原来的光标位置,有什么方法可以做到这一点吗?比如每次RichTextBox失去焦点时删除光标。
另一种可能的方式是:每次移动滚动条或使用鼠标滚轮时,将当前光标位置转到当前滚动条位置

更新2

我上传了项目文件并录制了视频:https://drive.google.com/file/d/1rY_5mxKR6zOPqHBIOVaARee14-Ietise/view?usp=sharing
你可以下载查看。(我稍后会删除。)

Version Windows 10 Professional
VersionNo   22H2
NT version  19045.2251
dsekswqp

dsekswqp1#

我也试过和你一样的方法,但是没有你描述的那样的观察结果。
但之后我调用了ScrollToCaret()方法,用于窗体上的文本框Activated事件。然后只生成相同的场景。
我试过的代码

namespace Text_Extration
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Activated(object sender, EventArgs e)
        {
            txtExtracted.ScrollToCaret();
        }
    }
}

希望这对你有帮助。

相关问题