Можно ли отключить ввод с клавиатуры для определенного элемента управления? - PullRequest
4 голосов
/ 08 февраля 2010

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

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

Ответы [ 5 ]

13 голосов
/ 09 февраля 2010

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

private void MyListBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
   e.Handled = true;
}
4 голосов
/ 08 февраля 2010

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

private void txtInput_KeyDown(object sender, KeyEventArgs e)
    {
            e.Handled = true; // user can input
            e.Handled = false; // user cannot input
    }
3 голосов
/ 08 февраля 2010

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

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

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

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

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

1 голос
/ 08 февраля 2010

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

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

0 голосов
/ 19 апреля 2019

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

Стоимость недвижимости Boolean true если событие обработано; в противном случае false.

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

...