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.

Foi útil?

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:

  1. Defina o formulário KeyPreviewpropriedade para true;
  2. WIRE UP FORM FormClosing e KeyDown 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top