You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中点击RichTextBox内超链接时如何获取鼠标点击位置?

WinForm RichTextBox 点击内部超链接时检测鼠标位置解决方案

原因说明

之前监听窗体/Panel点击事件不生效,是因为点击RichTextBox控件内部时,鼠标事件会被RichTextBox控件本身拦截消费,不会向上冒泡到父容器,因此父级的点击事件无法触发。

推荐实现方案

直接使用RichTextBox自带的超链接点击事件即可满足需求,具体实现步骤如下:

  1. 首先开启RichTextBox的超链接自动识别属性,在属性面板将DetectUrls设为true,或在代码中直接赋值:
richTextBox1.DetectUrls = true;
  1. 绑定LinkClicked事件,在事件中获取鼠标位置即可:
// 窗体构造函数中绑定事件
public Form1()
{
    InitializeComponent();
    richTextBox1.LinkClicked += RichTextBox1_LinkClicked;
}

// 超链接点击事件实现
private void RichTextBox1_LinkClicked(object sender, LinkClickedEventArgs e)
{
    // 获取全局屏幕坐标的点击位置
    Point screenClickPos = Control.MousePosition;
    // 转换为RichTextBox控件内部的相对坐标
    Point clientClickPos = richTextBox1.PointToClient(screenClickPos);
    // 获取被点击的超链接文本
    string clickedLink = e.LinkText;

    // 此处编写对应业务逻辑即可
}

其他可选方案

如果你使用自定义格式的非标准超链接,需要更精细的点击判定,可以直接监听RichTextBox本身的MouseDown事件:

private void richTextBox1_MouseDown(object sender, MouseEventArgs e)
{
    // e.Location 就是点击位置相对于RichTextBox左上角的坐标
    int clickCharIndex = richTextBox1.GetCharIndexFromPosition(e.Location);
    // 后续可通过获取该位置字符的格式属性,判定是否属于自定义超链接范围
}

注意事项

  • 所有鼠标事件直接绑定到RichTextBox控件本身,不要绑定到父容器即可避免事件被拦截的问题
  • 全局屏幕坐标转换为控件相对坐标必须调用对应控件的PointToClient方法,避免DPI缩放等场景下坐标偏移

内容的提问来源于stack exchange,提问作者dutoit077

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 01:15:03