Вот хороший учебник по созданию фокусируемого элемента управления. Я просто следил за ним, чтобы убедиться, что он работает. Кроме того, в элемент управления добавлено событие нажатия клавиши, которое работает при условии, что элемент управления имеет фокус.
http://en.csharp-online.net/Architecture_and_Design_of_Windows_Forms_Custom_Controls%E2%80%94Creating_a_Focusable_Control
По сути, все, что я сделал, это создал экземпляр своего пользовательского элемента управления, который наследуется от элемента управления. Затем добавлено событие KeyPress, Click и Paint. Нажатие клавиши было просто сообщением:
void CustomControl1_KeyPress(object sender, KeyPressEventArgs e)
{
MessageBox.Show(string.Format("You pressed {0}", e.KeyChar));
}
Событие Click имеет только:
this.Focus();
this.Invalidate();
Событие рисования я сделал так, просто чтобы оно было видно:
protected override void OnPaint(PaintEventArgs pe)
{
if (ContainsFocus)
pe.Graphics.FillRectangle(Brushes.Azure, this.ClientRectangle);
else
pe.Graphics.FillRectangle(Brushes.Red, this.ClientRectangle);
}
Затем, в основной форме, после создания экземпляра с именем mycustomcontrol и добавления обработчиков событий:
mycustomcontrol.Location = new Point(0, 0);
mycustomcontrol.Size = new Size(200, 200);
this.Controls.Add(mycustomcontrol);
Пример намного аккуратнее, чем мой пятиминутный код, просто хотел убедиться, что таким образом можно решить вашу проблему.
Надеюсь, это было полезно.
person
Brandi
schedule
03.05.2010