I have a readonly RichTextBox
, with its cursor set to Arrow
. Even so, when I hover it, the cursor flickers, and switches very quickly between Arrow
and IBeam
. How can I make it stay on Arrow
and not flicker?
I'm assuming this is the WinForms' RichTextBox, because the WPF one doesn't have this problem.
The RichTextBox handles WM_SETCURSOR
messages, to change the Cursor to Cursors.Hand
if the Mouse Pointer ends up on a Link. A note from the developers:
RichTextBox uses the
WM_SETCURSOR
message over links to allow us to change the cursor to a hand. It does this through a synchronous notification message. So we have to pass the message to the DefWndProc first, and then, if we receive a notification message in the meantime (indicated by changing "LinkCursor", we set it to a hand. Otherwise, we call theWM_SETCURSOR
implementation on Control to set it to the user's selection for the RichTextBox's cursor.
You could set the Capture when the Mouse enters the Control's bounds and then release it when the Mouse Pointer leaves the area. The capture needs to be released otherwise, when you first click on another control, the cursor will be set to RichTextBox instead:
private void richTextBox1_MouseMove(object sender, MouseEventArgs e)
{
if (!richTextBox1.ClientRectangle.Contains(e.Location)) {
richTextBox1.Capture = false;
}
else if (!richTextBox1.Capture) {
richTextBox1.Capture = true;
}
}