Desativar alt+f4, mas permita
-
27-09-2019 - |
Pergunta
Eu quero que o formulário não seja fechado fazendo Alt + F4 mas se Application.Exit()
ou this.Close
é chamado da mesma forma, ele deve ser fechado.
eu tentei CloseReason.UserClosing
Mas ainda não há ajuda.
Solução
Se você precisar filtrar Alt + F4 Somente o evento (deixando o clique de perto da caixa, this.Close()
e Application.Exit()
para se comportar como sempre), então posso sugerir o seguinte:
- Defina o formulário
KeyPreview
propriedade paratrue
; WIRE UP FORM
FormClosing
eKeyDown
Eventos:private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (_altF4Pressed) { if (e.CloseReason == CloseReason.UserClosing) e.Cancel = true; _altF4Pressed = false; } } private bool _altF4Pressed; private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Alt && e.KeyCode == Keys.F4) _altF4Pressed = true; }
Outras dicas
É muito fácil você pode fazer isso por conjunto Supressorypypress Propriedade para True em Form_keydown EventHandler como abaixo.
if (e.KeyCode == Keys.F4 && e.Alt)
{
e.SuppressKeyPress = true;
}
Com isso, você também pode fechar seu formulário ativo, definindo a propriedade SuppressKeyPress como false no mesmo EventHandller ou de qualquer outra maneira.
Capture Alt+F4 Hotkey, definindo a propriedade KeyPeview do formulário para o método True e substituindo o OnProcessCMDKEY.
Como você usou a perto de perto?
Veja o código de amostra aqui:http://msdn.microsoft.com/en-us/library/system.windows.form.form.formclosing.aspx
Você precisa definir a propriedade Cancelar do objeto FormClosingEventargs aprovado para interromper o fechamento do formulário.