2015-10-05 1 views
0

У меня есть некоторые элементы управления на панели, и я пытаюсь удалить их с помощью кнопки «Удалить». Я обработал событие KeyPress, как указано в How to get Keypress event in Windows Panel control in C# , и я получаю событие для кнопок (A-Z и 1-9), но не для кнопок Delete, Control/Alt/Shift или F1, F2 .....Get Delete Keypress event в панели управления Windows

Нужно ли делать что-то особенное для обработки этих кнопок?

+0

Только элементы управления, которые имеют * фокус * получить нажатия клавиш. И Panel не любит фокусироваться. Он не показывает, что он имеет фокус, и вы не можете вставить в него вкладку, обратите внимание, что у него нет свойства TabIndex. Это управление контейнером, все, что находится внутри панели, фокусируется. Почему вы хотите сделать это, неясно. Не используйте Panel. –

+0

@ Ханс, я использую панель для рисования на ней некоторых элементов управления. Итак, что в принципе происходит, пользователь может рисовать любые фигуры (прямоугольник, треугольник и т. Д.) С помощью щелчков мыши. Теперь я хочу, чтобы пользователь мог удалить любую выбранную фигуру с помощью кнопки «Удалить». Что-то похожее, как Power Point slide и I user Panel в качестве контейнера для фигур. – Pankaj

ответ

2

Попробуйте так:

private void Window_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Delete) 
    { 
     e.Handled = true; 
    } 
} 

Кроме того, необходимо установить KeyPreview на.

Вы также можете обратиться Keyboard.Modifiers Property

+0

@Pankaj, ['KeyDown'] (https://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx) (см. Соответствующую страницу mdsn для важных деталей) является первым случай, но иногда вам может понадобиться «KeyUp» – Sinatr

+0

@Rahul Tripathi, спасибо. Он работает сейчас. Я получил больше объяснений отсюда http://stackoverflow.com/questions/8188328/c-sharp-keypress-doesnt-capture-delete-key. – Pankaj