如何根据鼠标位置从文本框中获取特定文本值

Jam*_*858 11 .net c# textbox winforms mouse-position

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

(为了有一个带有一些'替代'数据的工具提示弹出窗口)我想得到鼠标悬停在上面的单词(或至少是这一行),这样我就可以找到显示的替代方法.

我有一些关于如何通过基于文本框和字体大小的计算来做到这一点的想法,但我不知道要走这条路,因为尺寸和字体可能经常变化.

那么......有没有办法使用鼠标位置抓取特定的文本框文本?

Mic*_*men 7

这是另一种解决方案.将此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);
}
Run Code Online (Sandbox Code Playgroud)