Визуализация значения по ключу - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, друзья. Пишу небольшую программку по анализу текстов, задача состоит в том, чтобы в введенном пользователем тексте, при наведении(или нажатии, это уж как мы сейчас решим) мышкой на слово, рядом с ним всплывало окошко с информацией о слове. Каждое слово в тексте во время его обработки представляется в виде ключа в словаре, значениями которого как раз таки и служит эта информация, которую необходимо вывести. Вопрос заключается в следующем, возможно ли как-то сделать так, чтобы по щелчку на слово, программа понимала, какое значение выделяется?

Решение задачи: «Визуализация значения по ключу»

textual
Листинг программы
  1. class MainForm : Form
  2. {
  3.     private Dictionary<string, string> _wordInfo = new Dictionary<string, string>(StringComparer.Ordinal);
  4.    
  5.     public MainForm()
  6.     {
  7.         var tb = new TextBox();
  8.         tb.Multiline = true;
  9.         tb.Location = new Point(10, 10);
  10.         tb.Width = 300;
  11.         tb.Height = 300;
  12.         Controls.Add(tb);
  13.  
  14.         Width = 340;
  15.         Height = 360;
  16.         tb.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;
  17.  
  18.         PopulateDictionary();
  19.         ToolTip tool = null;
  20.         tb.Click += (s, a) =>
  21.         {
  22.             tool?.Dispose();
  23.             var args = (MouseEventArgs)a;
  24.             int index = tb.GetCharIndexFromPosition(args.Location);
  25.             if (args.Location.Y > tb.GetPositionFromCharIndex(index).Y + tb.Font.Height)
  26.                 return;
  27.             var word = GetWord(tb.Text, index);
  28.             if (word != null && _wordInfo.ContainsKey(word.ToUpper()))
  29.             {
  30.                 tool = new ToolTip();
  31.                 tool.IsBalloon = true;
  32.                 tool.Show(word + " - " + _wordInfo[word.ToUpper()], this, args.Location);
  33.             }
  34.         };
  35.     }
  36.  
  37.     private string GetWord(string text, int index)
  38.     {
  39.         if (index < 0 || index >= text.Length)
  40.             return null;
  41.         int left = index;
  42.         while (left >= 0 && char.IsLetter(text[left]))
  43.             left--;
  44.         int right = index;
  45.         while (right < text.Length && char.IsLetter(text[right]))
  46.             right++;
  47.         if (left == right)
  48.             return null;
  49.         else
  50.             return text.Substring(left + 1, right - left - 1);
  51.     }
  52.  
  53.     private void PopulateDictionary()
  54.     {
  55.         _wordInfo["Картошка".ToUpper()] = "белорусский овощ";
  56.         _wordInfo["Авокадо".ToUpper()] = "заморская хрень";
  57.     }
  58. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы