Windows窗体RichTextBox -事件驱动的字点击

本文关键字:事件驱动的 窗体 RichTextBox Windows | 更新日期: 2023-09-27 18:08:17

我正在构建一个c# win表单应用程序。应用程序读取IRC通道并显示正在通过的消息。这些消息显示如下:

{username}:{发布的消息或执行的操作}

我需要它,以便应用程序的用户可以单击用户名(这些存储在数组中,因此可以引用)另一个模态表单打开与传入的用户名。麻烦的是,我不知道如何检测哪个单词在RichTextBox被点击(或者即使这是可能的)。

任何帮助都将非常感激。我真的是在一个死胡同,除了代码检测高亮的选择,我没有任何地方。

问候,克里斯。

Windows窗体RichTextBox -事件驱动的字点击

我能找到的唯一解决方案是使用RichTextBox方法GetCharIndexFromPosition,然后从那里向外执行循环,在每端停止任何非字母。

private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
    int index = richTextBox1.GetCharIndexFromPosition(e.Location);
    String toSearch = richTextBox1.Text;
    int leftIndex = index;
    while (leftIndex < toSearch.Count() && !Char.IsLetter(toSearch[leftIndex]))
        leftIndex++; // finds the closest word to the right
    if (leftIndex < toSearch.Count()) // did not click into whitespace at the end
    {
        while (leftIndex > 0 && Char.IsLetter(toSearch[leftIndex - 1]))
            leftIndex--;
        int rightIndex = index;
        while (rightIndex < toSearch.Count() - 1 && Char.IsLetter(toSearch[rightIndex + 1]))
            rightIndex++;
        String word = toSearch.Substring(leftIndex, rightIndex - leftIndex + 1);
        MessageBox.Show(word);
    }
}

在您的情况下,您可能有带有数字或空格的用户名,并且可能希望在rightIndex碰到冒号时停止它。如果用户名总是在换行符的开头,您可能还需要在换行符(''n')处停止leftIndex。