Допустим, вы хотели реализовать эту функцию в пользовательском контроле, который вы выполняли.Сначала вам нужно будет обработать событие нажатия мыши, чтобы зарегистрировать, где пользователь нажал, а после этого вы сможете обработать событие нажатия клавиши, чтобы зарегистрировать, какие клавиши нажимал пользователь.
Чтобы нарисовать фактический текств целевом месте у вас есть несколько вариантов.Вы можете использовать GDI + для рендеринга строк в элементе управления или вставлять метки, которые будут полезны вам из-за большого количества функциональных возможностей, которыми снабжены метки.
Вот пример прототипа того, как это можно реализовать с помощью GDI:
private Point? lastSelected;
private Dictionary<Point, string> renderedText = new Dictionary<Point, string>();
private Point LastSelected
{
get
{
return (Point)lastSelected;
}
}
private void Form1_Load(object sender, EventArgs e)
{
this.MouseDown += Form1_MouseDown;
this.KeyDown += Form1_KeyDown;
this.Paint += Form1_Paint;
}
void Form1_Paint(object sender, PaintEventArgs e)
{
foreach (KeyValuePair<Point, string> pair in renderedText)
{
e.Graphics.DrawString(pair.Value, new Font("Arial", 12), Brushes.Black,
pair.Key);
}
}
void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (lastSelected != null)
{
if (!renderedText.ContainsKey(LastSelected))
{
renderedText.Add(LastSelected, "");
}
renderedText[LastSelected] = renderedText[LastSelected] + e.KeyCode;
this.Invalidate();
}
}
void Form1_MouseDown(object sender, MouseEventArgs e)
{
lastSelected = e.Location;
}
Ответ на комментарий:
Приведенный выше код фиксирует расположение мыши, когда пользователь нажимает на форму, и сохраняет ее впеременная lastSelected.При каждом последующем нажатии клавиши в форме нажатая клавиша добавляется к строке, представляющей это местоположение.Кроме того, строки отображаются на экране в захваченном месте в краске.Строки визуализируются с использованием GDI +, что означает, что вам не нужно беспокоиться о длине отдельных символов.
Обратите внимание, что для реального приложения, хранящего местоположения и строки с помощью хэш-таблицы (словарь в C #)не очень хорошая идеяВам лучше создать собственный класс или структуру, которая будет содержать такую информацию, как местоположение, текст и т. Д.Это позволит вам еще больше улучшить функциональность, добавив такие параметры, как жирный шрифт, курсив, размеры шрифта и т. Д.