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

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

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

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

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

textual
Листинг программы
class MainForm : Form
{
    private Dictionary<string, string> _wordInfo = new Dictionary<string, string>(StringComparer.Ordinal); 
    
    public MainForm()
    {
        var tb = new TextBox();
        tb.Multiline = true;
        tb.Location = new Point(10, 10);
        tb.Width = 300;
        tb.Height = 300;
        Controls.Add(tb);
 
        Width = 340;
        Height = 360;
        tb.Anchor = AnchorStyles.Left | AnchorStyles.Top | AnchorStyles.Right | AnchorStyles.Bottom;
 
        PopulateDictionary();
        ToolTip tool = null;
        tb.Click += (s, a) =>
        {
            tool?.Dispose();
            var args = (MouseEventArgs)a;
            int index = tb.GetCharIndexFromPosition(args.Location);
            if (args.Location.Y > tb.GetPositionFromCharIndex(index).Y + tb.Font.Height)
                return;
            var word = GetWord(tb.Text, index);
            if (word != null && _wordInfo.ContainsKey(word.ToUpper()))
            {
                tool = new ToolTip();
                tool.IsBalloon = true;
                tool.Show(word + " - " + _wordInfo[word.ToUpper()], this, args.Location);
            }
        };
    }
 
    private string GetWord(string text, int index)
    {
        if (index < 0 || index >= text.Length)
            return null;
        int left = index;
        while (left >= 0 && char.IsLetter(text[left]))
            left--;
        int right = index;
        while (right < text.Length && char.IsLetter(text[right]))
            right++;
        if (left == right)
            return null;
        else
            return text.Substring(left + 1, right - left - 1);
    }
 
    private void PopulateDictionary()
    {
        _wordInfo["Картошка".ToUpper()] = "белорусский овощ";
        _wordInfo["Авокадо".ToUpper()] = "заморская хрень";
    }
}

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


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

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

8   голосов , оценка 3.625 из 5
Похожие ответы