我正在构建一个c#win表单应用程序。应用程序读取IRC通道并显示正在进行的消息。这些消息显示如下:
{username}:{已发布或已执行的消息}
我需要它,以便应用程序的用户可以点击用户名(这些存储在数组中,因此可以被引用)打开另一个模式表单并传入用户名。麻烦的是,我不知道如何检测RichTextBox中的哪个单词被点击(或者即使可能)。
任何帮助将不胜感激。我真的处于死胡同,除了检测突出显示的选择的代码,我不在哪里。
此致 克里斯
答案 0 :(得分:2)
我能找到的唯一解决方案是使用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。如果用户名始终位于换行符的开头,您可能还想在换行符处停止使用leftIndex(&#39; \ n&#39;)。