C# Windows窗体RichTextBox-由单击的单词驱动的事件

C# Windows窗体RichTextBox-由单击的单词驱动的事件,c#,.net,winforms,richtextbox,C#,.net,Winforms,Richtextbox,我正在创建一个c#win表单应用程序。应用程序读取IRC通道并显示正在通过的消息。这些消息显示如下: {用户名}:{发布或执行操作的消息} 我需要它,以便应用程序的用户可以单击用户名(这些用户名存储在数组中,因此可以被引用)。另一个模式表单将打开并传入用户名。问题是,我不知道如何检测RichTextBox中的哪个词被点击(或者即使这是可能的) 任何帮助都将不胜感激。我真的处于死胡同,除了检测高亮显示的选择的代码之外,我不在任何地方 问候,, Chris我能找到的唯一解决方案是使用RichText

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

{用户名}:{发布或执行操作的消息}

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

任何帮助都将不胜感激。我真的处于死胡同,除了检测高亮显示的选择的代码之外,我不在任何地方

问候,,
Chris

我能找到的唯一解决方案是使用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);
    }
}
private void richTextBox1_鼠标单击(对象发送器,鼠标指针)
{
int index=richTextBox1.GetCharIndexFromPosition(e.Location);
字符串toSearch=richTextBox1.Text;
int leftIndex=索引;
while(leftIndex0&&Char.isleter(toSearch[leftIndex-1]))
左索引--;
int rightIndex=索引;
while(rightIndex

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

我发现了两个类似的示例:。它们似乎都是通过文本进行的暴力搜索,因为RichTextBox似乎不支持这种类型的搜索。