Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# richtextbox中的可单击文本_C#_Richtextbox - Fatal编程技术网

C# richtextbox中的可单击文本

C# richtextbox中的可单击文本,c#,richtextbox,C#,Richtextbox,我想通过c#中的代码生成一个可点击的文本(它不是URL,只是普通文本),所以当我点击该文本时,它不会链接点击事件。 这是一本字典,所以当我搜索某个东西时,在描述中有一个单词与存储中的相同,我可以单击它来搜索该单词 for (int j = 0; j <= jml[i]; j++) { richTextBox4.AppendText(j + 1 + ". "); string[] desk = sk[i, j].Split('

我想通过c#中的代码生成一个可点击的文本(它不是URL,只是普通文本),所以当我点击该文本时,它不会链接点击事件。 这是一本字典,所以当我搜索某个东西时,在描述中有一个单词与存储中的相同,我可以单击它来搜索该单词

for (int j = 0; j <= jml[i]; j++)
        {
            richTextBox4.AppendText(j + 1 + ". ");
            string[] desk = sk[i, j].Split(' ');
            for (int l = 0; l < desk.Count(); l++)
            {
                for (int m = 0; m < kata.Count(); m++)
                {
                    if (desk[l] == kata[m])
                    {
                        richTextBox4.SelectionColor = Color.Blue;
                        desk[l] = LinkArea;
                    }
                }
                richTextBox4.AppendText(desk[l] + " ");
                richTextBox4.SelectionColor = Color.Black; 
            }
            richTextBox4.AppendText("\n");

        }

for(int j=0;j没有内置的方法,但如果您知道自己想要什么,构建起来并不困难

  • 第一步是决定可点击文本是如何定义的,内容如下:分隔符是什么

    • 如果你想要单个单词,这是相当容易的。一种方法是使用正则表达式来识别RTB中的单词。如果你不喜欢内置的定义单词的方法,我可以发布一个带有用户定义分隔符的代码。但是也许你对已经有了的东西感到满意
    • 如果您需要整个短语(包括空格)作为一个整体进行单击,那么您必须更具创造性:
    • 您可以在短语周围添加特殊字符
    • 也可以使用不可破坏的空间替换这些空间
    • 或者你可以在你的文本中写一张完整的地图,但这可能违背了你的目的

    • 除了简单的单词外,任何东西都意味着你需要对文本进行一些修改

结果应该是一个函数,可以找到可单击文本的开始和结束,并返回已单击的单词/短语

  • 第二步是在
    字典中查找文本
    ,并对值执行您想要执行的操作,例如,在标签中显示翻译:

  • 为此,您必须首先通过添加键-值对来准备字典:键是可单击的文本,值是您需要查找的任何内容:

以下是您可以如何使用它:

private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
    string word = getWordAtIndex(richTextBox1, richTextBox1.SelectionStart);
    if (dictEnGE.ContainsKey(word)) aLabel.Text = dictEnGE[word];
}

你的问题是什么?如何在没有www的情况下制作可点击的文本。你的问题解决了吗?
Dictionary<string, string> dictEnGE = new Dictionary<string, string>();
dictEnGE.Add("house", "Haus");
dictEnGE.Add("man", "Mann");
dictEnGE.Add("mouse", "Maus");
//..
string getWordAtIndex(RichTextBox RTB, int index)
{
    string wordSeparators = " .,;-!?\r\n\"";
    int cp0 = index;
    int cp2 = RTB.Find(wordSeparators.ToCharArray(), index);
    for (int c = index; c > 0; c--)
    { if (wordSeparators.Contains(RTB.Text[c])) { cp0 = c + 1; break; } }
    int l = cp2 - cp0;
    if (l > 0) return RTB.Text.Substring(cp0, l); else return "";
}
private void richTextBox1_MouseClick(object sender, MouseEventArgs e)
{
    string word = getWordAtIndex(richTextBox1, richTextBox1.SelectionStart);
    if (dictEnGE.ContainsKey(word)) aLabel.Text = dictEnGE[word];
}