c# - RichTextBox 光标不断变为 IBeam
问题描述
我有一个 readonly RichTextBox
,其光标设置为Arrow
. Arrow
尽管如此,当我将其悬停时,光标会闪烁,并在和之间快速切换IBeam
。我怎样才能让它保持Arrow
亮起而不闪烁?
解决方案
我假设这是 WinForms 的 RichTextBox,因为 WPF 没有这个问题。
RichTextBox 处理WM_SETCURSOR
消息,以Cursors.Hand
在鼠标指针位于链接上时将光标更改为。开发人员的说明:
RichTextBox 使用
WM_SETCURSOR
链接上的消息来允许我们将光标更改为手形。它通过同步通知消息做到这一点。所以我们必须先将消息传递给 DefWndProc,然后,如果我们在此期间收到通知消息(通过更改“LinkCursor”表示,我们将其设置为手。否则,我们调用WM_SETCURSOR
Control 上的实现来设置它到用户对 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;
}
}
推荐阅读
- java - spring boot 控制台应用程序:线程“main”java.lang.NoClassDefFoundError 中的异常
- javascript - javascript将选项元素添加到选择列表,但具有自定义数据属性
- c# - 如何使 SplitContainers 中的 ListBoxes 正确调整大小?
- python - 找出给定数据集中每列中缺失值的百分比
- bash - 使用有限的 EC2 存储同时下载和传输文件
- javascript - 以 html 格式上传图片
- unity3d - Vuforia 在后台停止视频
- r - 如何避免在while循环外编码第一次迭代
- python - 在开发模式下安装烧瓶应用程序
- sql-server - SQL Server BACPAC 导入失败并出现 IDENTITY_INSERT 错误