Могу ли я отключить ввод с клавиатуры для определенного элемента управления?

Можно ли отключить ввод с клавиатуры в элемент управления? Например, ListView? Как мне это сделать? Я пробовал переопределить KeyUp KeyDown события, но, видимо, это было не так?

IsEnabled - хорошее решение, однако я хочу только отключить взаимодействие с клавиатурой и оставить взаимодействие с мышью нетронутым.


person Maciek    schedule 08.02.2010    source источник
comment
Так вы просто хотите наказать пользователей клавиатуры?   -  person John Knoeller    schedule 08.02.2010
comment
Конечно, знаю. Я ищу только мышь   -  person Maciek    schedule 09.02.2010


Ответы (5)


Обработка события KeyDown слишком поздно, но вы можете обработать PreviewKeyDown, и это должно дать вам желаемое поведение:

private void MyListBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
   e.Handled = true;
}
person John Myczek    schedule 09.02.2010

Уважаемый Maciek, единственное, что вам нужно сделать, это использовать событие OnKeyDown, просто выполните

private void txtInput_KeyDown(object sender, KeyEventArgs e)
    {
            e.Handled = true; // user can input
            e.Handled = false; // user cannot input
    }
person Nasser Hadjloo    schedule 08.02.2010
comment
эй, Мачек, вы не должны использовать оба обработанных кода выше, как я уже упоминал в комментариях, которые вы должны использовать - person Nasser Hadjloo; 10.02.2010

KeyDown обычно работает у меня, если вы делаете в нем следующее:

e.Handled = true;
e.SuppressKeyPress = true;

Более полный пример с практическим применением (отключение ввода нечисловых символов): http://cccontrols.codeplex.com/SourceControl/changeset/view/34146#611536

Тем не менее, Джон хорошо подметил. По какой причине вы хотели бы отключить взаимодействие с Control, но не установить Enabled = false?

Изменить: я только что заметил тег WPF. Я больше не уверен в своем ответе, так как я ненавижу WPF ;-)

person Cory Charlton    schedule 08.02.2010
comment
не может получить доступ к e.SuppressKeyPress: / - person Maciek; 08.02.2010

Это цель WebControl.Enabled = false;, чтобы предотвратить его реакцию на ввод пользователя.

edit: теперь, когда вопрос изменился, отключение элемента управления больше не является решением. Однако я думаю, что элемент управления, который реагирует на щелчки мыши не клавиатурой, глючит, не все предпочитают использовать мышь.

person John Knoeller    schedule 08.02.2010
comment
Я ставлю минус, потому что такой подход отключит элемент управления, а это не решение. - person Nasser Hadjloo; 08.02.2010

KeyPressEventArgs.Handled: получает или задает значение, указывающее, было ли обработано событие KeyPress.

Значение свойства Boolean true, если событие обрабатывается; в противном случае false.

если вы установите e.Handled = true, событие клавиатуры больше не будет отправляться.

person LiamHsia    schedule 19.04.2019