У меня есть пользовательский контейнерный элемент управления (производный от FlowLayoutPanel
), который содержит ноль или более дочерних элементов управления, перетаскиваемых туда пользователем. При нажатии дочернего элемента управления он «выбран». (Он нарисован с цветной рамкой и доступны варианты для изменения его свойств.)
Я бы хотел обработать клавишу Delete
, чтобы, если пользователь в данный момент работает в элементе управления контейнером (например, нажал внутри элемента управления или в дочернем элементе управления), текущий выбранный элемент управления (если он есть) удален.
У меня уже есть функция удаления, работающая с помощью контекстного меню правой кнопки мыши на дочерних элементах. Моя проблема связана с обработкой клавиши Delete
. Я не могу понять, как вызвать событие KeyDown в моем контроле контейнера. Я знаю, что это как-то связано с фокусом, поэтому нужно вызывать Control.Select()
(или его эквивалент), но как лучше это сделать? Где находится эта логика фокуса? Или есть лучший способ?
Я не хочу обрабатывать событие KeyDown
в форме, а затем анализировать, где находится фокус. Это контейнерный элемент многократного использования, и я хочу, чтобы там находилась логика.
Что мне нужно сделать, чтобы событие KeyDown
сработало на пользовательском элементе управления?
public class MyContainer : FlowLayoutPanel
{
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
MessageBox.Show("How do I get here?");
e.Handled = true;
}
base.OnKeyDown(e);
}
}