首页 > 解决方案 > RichTextBox 光标不断变为 IBeam

问题描述

我有一个 readonly RichTextBox,其光标设置为Arrow. Arrow尽管如此,当我将其悬停时,光标会闪烁,并在和之间快速切换IBeam。我怎样才能让它保持Arrow亮起而不闪烁?

标签: c#winformsrichtextboxmouse-cursor

解决方案


我假设这是 WinForms 的 RichTextBox,因为 WPF 没有这个问题

RichTextBox 处理WM_SETCURSOR消息,以Cursors.Hand在鼠标指针位于链接上时将光标更改为。开发人员的说明:

RichTextBox 使用WM_SETCURSOR链接上的消息来允许我们将光标更改为手形。它通过同步通知消息做到这一点。所以我们必须先将消息传递给 DefWndProc,然后,如果我们在此期间收到通知消息(通过更改“LinkCursor”表示,我们将其设置为手。否则,我们调用WM_SETCURSORControl 上的实现来设置它到用户对 RichTextBox 光标的选择。

您可以在鼠标进入控件的边界时设置捕获,然后在鼠标指针离开该区域时释放它。否则需要释放捕获,当您第一次单击另一个控件时,光标将设置为 RichTextBox:

private void richTextBox1_MouseMove(object sender, MouseEventArgs e)
{
    if (!richTextBox1.ClientRectangle.Contains(e.Location)) {
        richTextBox1.Capture = false;
    }
    else if (!richTextBox1.Capture) {
        richTextBox1.Capture = true;
    }
}

推荐阅读