RichTextBox 光标不断变为 IBeam

Sip*_*ipo 5 c# richtextbox cursor winforms

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

Jim*_*imi 3

我假设这是 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;
    }
}
Run Code Online (Sandbox Code Playgroud)