Jak zakázat Alt + F4 zavření formuláře?

hlasů
63

Jaký je nejlepší způsob, jak zakázat Alt+ F4v ac # win formě, aby se zabránilo uživatele od zavření formuláře?

Jsem pomocí formuláře jako dialog pop-up pro zobrazení progress bar a nechci, aby uživatel bude moci uzavřít.

Položena 18/08/2008 v 18:16
zdroj uživatelem
V jiných jazycích...                            


12 odpovědí

hlasů
88

To dělá práci:

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

Edit: V reakci na obavy pix0rs - ano, máte pravdu, že nebudete moci programově zavřít aplikaci. Nicméně, můžete jednoduše před uzavřením formuláře odebrat rutinu události pro form_closing události:

this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();
Odpovězeno 18/08/2008 v 18:27
zdroj uživatelem

hlasů
50

@TK

Podíváte-li se na hodnotu FormClosingEventArgs e.CloseReason, bude to říct, proč je formulář je uzavřen. Pak můžete rozhodnout, co dělat, možné hodnoty jsou následující:

Uživatelské jméno - Popis


Žádné - Příčinou uzávěru nebyl definován, nebo nebylo možné určit.

WindowsShutDown - Operační systém se zavřít všechny aplikace před vypnutím.

MdiFormClosing - Původní forma tohoto vícenásobného rozhraní dokumentů (MDI) forma se uzavírá.

UserClosing - uživatel je zavření formuláře prostřednictvím uživatelského rozhraní (UI), například klepnutím na tlačítko Zavřít v okně formuláře výběrem Close z menu kontrolního okna, nebo stisknutím tlačítka ALT+ F4.

TaskManagerClosing - Správce úloh systému Microsoft Windows je ukončení aplikace.

FormOwnerClosing - Formulář majitel se uzavírá.

ApplicationExitCall - Exit metoda třídy aplikace byla vyvolána.

Odpovězeno 08/09/2008 v 10:10
zdroj uživatelem

hlasů
22

Věřím, že to je správný způsob, jak to udělat:

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

  base.OnFormClosing(e);
}
Odpovězeno 09/01/2009 v 14:17
zdroj uživatelem

hlasů
14

Všimněte si, že je to považováno za špatnou formu pro aplikaci zcela zabránit se od jejich zavření. Měli byste zkontrolovat argumenty událostí pro událost ukončení zjistit, jak a proč byla přihláška požádal ji ukončit. Pokud je to z důvodu vypnutí systému Windows, neměli byste zabránit zavřít z děje.

Odpovězeno 18/08/2008 v 22:19
zdroj uživatelem

hlasů
12

Dalo by se zpracovat FormClosingudálost a nastavte FormClosingEventArgs.Cancelna true.

Odpovězeno 18/08/2008 v 18:20
zdroj uživatelem

hlasů
11

Jsem pomocí formuláře jako dialog pop-up pro zobrazení progress bar a nechci, aby uživatel bude moci uzavřít.

V případě, že uživatel je určen k zavření aplikace (a dobře) stačí stisknout ALT + F4, budou s největší pravděpodobností bude také dostatečně znalý spustit Správce úloh a zabít vaši žádost místo.

Alespoň s Alt + F4 vaše aplikace může udělat elegantní vypnutí, spíše než jen aby se lidé ji zabít. Ze zkušenosti, lidé zabíjejí své aplikace znamená, že poškozený konfigurační soubory, rozbité databází, napůl hotové úkoly, které nelze obnovit, a mnoho dalších bolestných věcí.

Alespoň výzvu jim ‚jsou si jisti, že‘ spíše než naplno předcházet tomu.

Odpovězeno 18/08/2008 v 22:25
zdroj uživatelem

hlasů
2

To je práce pro mě 100% je to pro zakázání ALT + F4

    private void test_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (test.ModifierKeys == Keys.Alt || test.ModifierKeys == Keys.F4) 
        { 
            e.Cancel = true; 
        }    
    }
Odpovězeno 16/11/2017 v 13:53
zdroj uživatelem

hlasů
2

Odebírat FormClosing událost

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

Pouze jeden řádek v těla metody.

Odpovězeno 05/03/2013 v 05:45
zdroj uživatelem

hlasů
2

By FormClosing nazvat i když jste programatically zavřením okna? Pokud ano, měli byste pravděpodobně chtít přidat nějaký kód, aby formuláře, které mají být uzavřeny, když jste skončil s ním (namísto vždy zrušit operaci)

Odpovězeno 18/08/2008 v 18:46
zdroj uživatelem

hlasů
1

To dělá práci:

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


}
Odpovězeno 31/05/2018 v 00:57
zdroj uživatelem

hlasů
0

V obsluze události FormClosing jste nemohli vyslýchat vyrovnávací paměti klávesnice (to máte dokonce přístup na to?) To se v případě [Alt] bylo stisknuto + [F4], zruší-li to pravda, i nadále, pokud ne?

Odpovězeno 18/08/2008 v 18:38
zdroj uživatelem

hlasů
-2

Skrýt tlačítko Zavřít na formuláři pomocí následující v konstruktoru formuláře:

this.ControlBox = false;
Odpovězeno 19/06/2016 v 16:09
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more