Deaktivieren Sie Alt + F4 aber erlauben die die Form von Code geschlossen werden soll, wird CloseReason.UserClosing nicht helfen

StackOverflow https://stackoverflow.com/questions/2643712

Frage

Ich mag, dass das Formular nicht schließen, indem Sie Alt + F4 aber wenn Application.Exit() oder this.Close aus dem gleichen Formular aufgerufen wird, soll es geschlossen werden.

Ich habe versucht CloseReason.UserClosing aber immer noch keine Hilfe.

War es hilfreich?

Lösung

Wenn Sie herausfiltern müssen Alt + F4 Ereignis nur (Abfahrt Klicken der Nähe Box, this.Close() und Application.Exit() wie gewohnt verhalten), dann kann ich folgendes vorschlagen:

  1. Set Form KeyPreview Eigenschaft true;
  2. verdrahten Form ist FormClosing und KeyDown Ereignisse:

    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;
    }
    

Andere Tipps

Es ist sehr einfach Sie es durch den Satz tun können SuppressKeyPress Eigenschaft auf true auf Form_KeyDown Eventhandler wie unten.

        if (e.KeyCode == Keys.F4 && e.Alt)
        {
            e.SuppressKeyPress = true;

        }

Damit können Sie auch in der Nähe Ihrer aktiven Form von Set SuppressKeyPress Eigenschaft auf false auf gleiche eventHandller oder jede andere Art und Weise.

Aufnahme Alt + F4 Hotkey nach Form der KeyPreview Eigenschaft auf true und zwingende OnProcessCmdKey Methode setzen.

Wie haben Sie verwenden CloseReason?

Sehen Sie den Beispielcode hier: http://msdn.microsoft.com/ en-us / library / system.windows.forms.form.formclosing.aspx

Sie müssen die festlegen Eigenschaft der übergebenen FormClosingEventArgs Abbrechen Objekt das Formular Schließung zu stoppen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top