2015-04-13 3 views
0

Я хочу сделать интерактивный текст с помощью кода в C# (его не URL-адрес обычного текста), поэтому, когда я нажимаю на этот текст, он вызывает событие linkclicked. Это для словаря, поэтому, когда я что-то ищу, и в описании есть одно слово из хранилища, я могу щелкнуть его, чтобы найти это слово.clickable text in richtextbox

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"); 

     } 

мой код на данный момент (текст типа гиперссылки только цветов, которые работают)

+0

Что ваш вопрос? – TaW

+0

как сделать интерактивный текст без www. перед ним –

+0

Вы решили свою проблему? – TaW

ответ

0

Там нет встроенного в пути, но если вы знаете, что вы хотите, это не трудно построить.

  • Шаг один должна решить, как интерактивный текст определяется, следующим образом: Какие сепараторов?

    • Если вам нужны отдельные слова, это довольно просто. Одним из способов является использование regEx для идентификации слов в RTB. Если вам не нравится встроенный способ определения слова, я могу опубликовать код с пользовательскими разделителями. Но, возможно, вы довольны тем, что уже есть.
    • Если вам нужны целые фразы (включая пробелы), чтобы быть интерактивными как одно целое, то вам придется быть немного более изобретательными:
    • либо вы можете добавлять специальные символы вокруг фразы
    • или вы можете заменить пробелы на неразложимых пространствах
    • Или вы могли бы написать полную карту в свой текст, но это, вероятно, не соответствует вашей цели.

    • Все, кроме простых слов, будет означать, что вам нужно будет внести некоторые изменения в текст.

Результат должен быть функцией, которая может найти начало и конец интерактивными текста и вернуть Clicked слово/фразу.

  • Шаг второй - искать текст в Dictionary<string, string> и делать то, что вы хотите сделать со значением, например. показать перевод в Лейбл:

if (dictEnGE.ContainsKey(theClickedWord)) 
    label.Text = dictEnGE[theClickedWord]; 
  • Для этой работы необходимо сначала подготовить словарь, добавив пары ключ-значение: Клавиши являются интерактивными тексты и значения независимо вам нужно найти:

Dictionary<string, string> dictEnGE = new Dictionary<string, string>(); 
dictEnGE.Add("house", "Haus"); 
dictEnGE.Add("man", "Mann"); 
dictEnGE.Add("mouse", "Maus"); 
//.. 

Таким образом, вся Решение: Подготовьте словарь, код события Mouseclick, чтобы найти текст, нажатый, найдите текст в дикториале, сделайте свою вещь со значением, которое вы найдете.

Update: Вот функция, чтобы получить Clicked слово:

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]; 
}