c# – 如何根据鼠标位置从文本框获取特定的文本值

我有一个多行文本框,根据给定的数据显示一些值(通常每行一个值).

(为了使工具提示弹出一些“替代”数据),我想得到鼠标悬停的单词(或至少在行上),以便我可以找到显示的替代方法.

我有几个想法,如何做到这一点基于文本框和字体大小的计算,但我不会下去这条路,因为大小和字体可能会频繁更改.

所以…有没有办法使用鼠标位置来抓取特定的文本框文本?

解决方法

这是一个替代解决方案.将此MouseMove事件添加到您的TextBox中:
private void txtHoverWord_MouseMove(object sender,MouseEventArgs e)
{
    if (!(sender is TextBox)) return;
    var targetTextBox = sender as TextBox;
    if(targetTextBox.TextLength < 1) return;

    var currentTextIndex = targetTextBox.GetCharIndexFromPosition(e.Location);

    var wordRegex = new Regex(@"(\w+)");
    var words = wordRegex.Matches(targetTextBox.Text);
    if(words.Count < 1) return;

    var currentWord = string.Empty;
    for (var i = words.Count - 1; i >= 0; i--)
    {
        if (words[i].Index <= currentTextIndex)
        {
            currentWord = words[i].Value;
            break;
        }
    }
    if(currentWord == string.Empty) return;
    toolTip.SetToolTip(targetTextBox,currentWord);
}

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...