Визуализация значения по ключу - 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()] = "заморская хрень";
}
}