Eu tenho um aplicativo Windows Forms muito simples. E, no Windows (ou pelo menos nos Windows Forms Applications), quando você pressiona Enter enquanto estiver dentro de um Controle TextBox de linha única, ouve um Ding. É um som desagradável, que indica que você não pode inserir uma nova linha, porque é uma caixa de texto de linha única.
Está tudo bem. No entanto, no meu formulário, tenho 1 TextBox e um botão de pesquisa. E estou permitindo que o usuário realize uma pesquisa pressionando Enter depois de terminar de digitar, para que não precisem usar o mouse para clicar no botão Pesquisar.
Mas esse som Ding ocorre. É muito irritante.
Como podemos fazer com que apenas o som não seja reproduzido no meu formulário?
@ David H - Aqui está como eu estou detectando o enter pressionando:
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
// Perform search now.
}
}
fonte
Respostas:
Confira a propriedade Form.AcceptButton . Você pode usá-lo para especificar um botão padrão para um formulário, neste caso, pressionando enter.
Dos documentos:
Há também uma propriedade CancelButton para quando o usuário pressiona escape.
fonte
this.AcceptButton = buttonOK; this.CancelButton = buttonCancel;
Funciona para mim:
O SuppressKeyPress é realmente o truque. Espero que ajude você.
fonte
e.Handled = true;
foi insuficiente; foi oSuppressKeyPress
que fez o truque.ToolStripTextBox.KeyDown
. Nenhuma outra solução fez. Obrigado!textbox
eKeyDown
evento #Experimentar
fonte
Tab
primeiro?Basta adicionar
e.SuppressKeyPress = true;
sua declaração "se".fonte
Você pode usar o KeyPress em vez do KeyUp ou KeyDown, é mais eficiente e aqui está como lidar
e diga paz ao 'Ding'
fonte
KeyDown
, usandoe.Handled
ee.SuppressKeyPress
não funcionou para mim - ainda tocando. Mas alterá-lo conforme sugerido aqui para usar oKeyPress' event and
e.Handled` fez isso muito bem.Use
SuppressKeyPress
para interromper o processamento contínuo do pressionamento de tecla após manipulá-lo.fonte
Eu tropecei neste post enquanto tentava lidar com um KeyDown que funcionou para mim.
Suprimir a pressão da tecla impede que o evento seja enviado ao controle subjacente. Isso deve funcionar se você estiver manipulando manualmente tudo o que a tecla Enter fará dentro dessa caixa de texto. Desculpe pelo Visual Basic.
fonte
Há muito pouca chance de alguém chegar a essa resposta, mas algumas outras respostas são realmente assustadoras. Suprimir evento
KeyDown
mata 2 eventos adicionais em um ataque. Definire.Handled
propriedade comotrue
é inútil neste contexto.A melhor maneira é definir a
Form.AcceptButton
propriedade para o botão de pesquisa real.Há também outra maneira de utilizar a
Enter
chave - algumas pessoas podem querer que ela atue comoTAB
botão. Para fazer isso, adicione um novoButton
, defina suaLocation
propriedade fora daForm
área (ie(-100, -100)
) - definindo aVisible
propriedade parafalse
desativar osButton
manipuladores em alguns casos. Defina aForm.AcceptButton
propriedade para o seu novo botão. NoClick
manipulador de eventos, adicione o seguinte códigothis.SelectNextControl(ActiveControl, true, true, true, true)
Agora, você pode querer transferir
focus
somente quandofocus
-lo emTextBox
você pode querer qualquer testeActiveControl
tipo ou usoe.Supress
propriedade em manipuladores de eventos de controles não destinados a usoEnter
comoTAB
é isso. Você nem precisa capturare.KeyCode
fonte
fonte
No WinForms, a tecla Enter causa um som Ding porque a propriedade AcceptButton do formulário não está especificada. Se você não precisar de um AcceptButton, o som ding poderá ser suprimido definindo o formulário KeyPreview como true e insira o seguinte evento KeyPress:
Não importa qual controle esteja ativo, não haverá mais som ao pressionar a tecla Enter. Como a ordem de processamento de eventos de teclas é KeyDown, KeyPress e KeyUp, a tecla Enter ainda funcionará nos eventos KeyDown dos controles.
fonte
Defina a propriedade IsDefault do botão Pesquisar como
true
. Isso o tornará um botão padrão e será clicado automaticamente quando a tecla Enter for pressionada.fonte
To specify the default button of a form, set the AcceptButton property of the form to the desired button.
AcceptButton
parece mais elegante, mas estou acostumado aIsDefault
mim mesmo.Bem, eu vivi com esse problema por tempo suficiente e procurei aqui.
Depois de pensar nisso por um bom tempo e querer a maneira mais simples de corrigi-lo, criei a maneira mais fácil, mas não tão elegante, de corrigi-lo.
Aqui está o que eu fiz.
Isso resolveu todos os problemas secundários listados neste segmento, incluindo o ToolStripMenu. Minha maior reclamação foi o BindingNavigator, quando eu inseria um número de registro na posição atual para navegar e pressionava enter.
De acordo com a pergunta original em que o programador queria uma função de pesquisa quando o botão Enter foi pressionado, simplesmente coloquei o código de pesquisa no botão OK invisível!
Até agora, isso parece resolver todos os problemas, mas como todos sabemos com o Visual Studio, algo provavelmente surgirá.
A única outra maneira elegante possível em que eu poderia pensar seria escrever uma nova classe de manipulação de teclas, que é muito trabalhosa para a maioria dos meus projetos.
fonte
Você pode definir a caixa de texto como várias linhas como true e, em seguida, pressionar a tecla Enter.
fonte
Eu mudei as propriedades da caixa de texto para uma caixa de texto com várias linhas e funciona para mim.
fonte
fonte
Multiline
código é completamente irrelevante.