Frage

Was ist der beste Weg, um zu deaktivieren Alt + F4 in einer c# form gewinnen zu verhindern, dass Benutzer das Formular schließen?

Ich bin mit einem Formular als popup-dialog, um eine Statusleiste angezeigt, und ich möchte nicht die Benutzer werden in der Lage, um es zu schließen.

War es hilfreich?

Lösung

Dies macht den job:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}

Edit:In Reaktion auf pix0rs Sorge - ja, Sie sind richtig, dass Sie nicht in der Lage zu Programm, schließen Sie die app.Jedoch, Sie können einfach entfernen Sie den Ereignis-handler für das form_closing Ereignis vor dem schließen der form:

this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();

Andere Tipps

Wenn Sie einen Blick auf die Wert von FormClosingEventArgs e.CloseReason, es wird dir sagen, warum das Formular geschlossen wird.Sie können dann entscheiden, was zu tun ist, die möglichen Werte sind:

Member name - Beschreibung


None - Die Ursache für die Schließung war nicht definiert oder nicht ermittelt werden konnte.

WindowsShutDown - Das Betriebssystem ist, schließen Sie alle Anwendungen vor dem Herunterfahren.

MdiFormClosing - Das übergeordnete form eines multiple document interface (MDI) form ist geschlossen.

UserClosing - Der Benutzer das Formular schließen über die Benutzeroberfläche (UI), zum Beispiel, indem Sie auf die Schließen-Schaltfläche auf der Formular-Fenster, wählen Schließen aus dem Fenster control-Menü, oder drücken ALT+F4.

TaskManagerClosing - Den Microsoft Windows Task-Manager ist die Anwendung schließen.

FormOwnerClosing - Der Eigentümer form ist geschlossen.

ApplicationExitCall - Die Exit-Methode der Application-Klasse aufgerufen wurde.

Ich glaube, das ist der richtige Weg, es zu tun:

protected override void OnFormClosing(FormClosingEventArgs e)
{
  switch (e.CloseReason)
  {
    case CloseReason.UserClosing:
      e.Cancel = true;
      break;
  }

  base.OnFormClosing(e);
}

Beachten Sie, dass es wird als schlechte form für eine Anwendung vollständig verhindern, dass sich aus schließen.Sie sollten überprüfen Sie die Ereignis Argumente für das Closing-Ereignis, um zu bestimmen, wie und warum Ihre Anwendung wurde aufgefordert, zu schließen.Wenn es ist, weil von einem Windows Herunterfahren, sollten Sie nicht verhindern, dass das schließen verhindert.

Sie behandeln konnte, die FormClosing Ereignis und setzen FormClosingEventArgs.Cancel zu true.

Ich bin mit einem Formular als popup-dialog, um eine Statusleiste angezeigt, und ich möchte nicht die Benutzer werden in der Lage, um es zu schließen.

Wenn der Benutzer bestimmt ist, schließen Sie die app (und kompetenten) genug, um drücken Sie alt+f4, werden Sie höchstwahrscheinlich auch sachkundig genug, um den task-manager ausführen und töten Ihre Anwendung statt.

Zumindest mit alt+f4 Ihre app tun können ein ordnungsgemäßes Herunterfahren, anstatt nur die Menschen zu töten.Aus Erfahrung, Menschen zu töten, die Ihre app bedeutet corrupt config-Dateien, defekte Datenbanken, halbfertiger Aufgaben, die Sie kann nicht Fort, und viele andere schmerzhafte Dinge.

Mindestens die Eingabeaufforderung mit "sind Sie sicher, dass" eher als flach aus, die verhindern, dass es.

Dies ist ein hack zu deaktivieren Alt + F4.

private void test_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4) 
    { 
        e.Cancel = true; 
    }    
}

Dies macht den job:

bool myButtonWasClicked = false;
private void Exit_Click(object sender, EventArgs e)
{
  myButtonWasClicked = true;
  Application.Exit();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
  if (myButtonWasClicked)
  {
    e.Cancel = false;
  }
  else
  {
    e.Cancel = true;
  }


}

Würde FormClosing aufgerufen werden, selbst wenn Sie ein Programm das Fenster schließen?Wenn dem so ist, würden Sie wahrscheinlich wollen, fügen Sie einige code zu erlauben, das Formular zu schließen, wenn Sie fertig sind mit es (statt immer Abbrechen des Vorgangs)

Abonnieren FormClosing-Ereignis

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = e.CloseReason == CloseReason.UserClosing;
}

Nur eine Zeile in der Methode body.

Ausblenden schließen Taste auf Formular unter Verwendung der folgenden in den Konstruktor des Formulars:

this.ControlBox = false;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top