Posso desativar a entrada do teclado para um controle específico?
-
19-09-2019 - |
Pergunta
É possível desativar a entrada do teclado para um controle? Por exemplo a ListView
? Como faço isso? Eu tentei substituir o KeyUp
KeyDown
Eventos, mas aparentemente não era esse o caminho?
IsEnabled
é uma boa solução, no entanto, eu só desejo desativar a interação do teclado e deixar a interação do mouse intacta.
Solução
Manuseando o KeyDown
o evento é tarde demais, mas você pode lidar com o VIGUNDAKEKENDOWN evento e isso deve lhe dar o comportamento que você está procurando:
private void MyListBox_PreviewKeyDown(object sender, KeyEventArgs e)
{
e.Handled = true;
}
Outras dicas
Caro Maciek, o único thig que você precisa fazer é usar o evento OnKeyDown, basta fazer
private void txtInput_KeyDown(object sender, KeyEventArgs e)
{
e.Handled = true; // user can input
e.Handled = false; // user cannot input
}
KeyDown geralmente funciona para mim se você fizer o seguinte:
e.Handled = true;
e.SuppressKeyPress = true;
Um exemplo mais completo com uma aplicação prática (desativando a entrada de caracteres não numéricos): http://cccontrols.codeplex.com/sourcecontrol/changeset/view/34146#611536
John faz um bom argumento. Qualquer motivo que você queira desativar a interação com o Control
mas não definido Enabled
= false
?
Editar: Acabei de notar a tag wpf. Não tenho mais tanta certeza da minha resposta, já que sou um odiador do WPF ;-)
Esse é o propósito do WebControl.Enabled = false;
Para impedir que ele responda à entrada do usuário.
editar: Agora que a pergunta mudou, desativar o controle não é mais uma solução. No entanto, acho que um controle que responde aos cliques do mouse por não o teclado é Buggy, nem todo mundo prefere usar o mouse.
KeyPressEventArgs.Handled
: Recebe ou define um valor indicando se o evento KeyPress foi tratado.
Valor da propriedadeBoolean
true
Se o evento for tratado; por outro lado, false
.
Se você definir e.Handled = true
, evento do teclado não é mais despacho.