Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C#: Schliessen verhindern

Empfohlene Antworten

Veröffentlicht

hallo,

habe einen C# Form-Dialog der wie bei einer MessageBox nur einen Button hat. Der Benutzer soll die Meldung lesen und auf den Button klicken. Die Form hat aber das Schliessen "x" am rechten oberen rand. Wie bekomme ich das weg?

und kann man es dann mit "alt+F4" schliessen?

Du suchst das Ereignis, das beim Schliessen des Fensters ausgelöst wird und du behandelst es in einer eigenen Funktion.

Die macht nichts weiter, als anzugeben, dass das Ereignis als behandelt zu markieren. Sollte das nicht klappen, dann Cancel das Ereignis einfach.

Gibt auch ne Eigenschaft die nennt sich ControlBox oder so ähnlich. Mit ihr kannst du den Schließen-Button ausblenden. Damit dürfte auch Alt + F4 nicht mehr funktionieren.

Da muss ich euch beide aber enttäuschen, damit werden nur die Buttons oben ausgeblendet, man kann die Anwendung aber trotzdem mit Alt + F4 schließen.

@Didii:

Ich poste später mal ein Beispiel, hab gerade nicht viel Zeit.

Hallo,

also wie folgt kannst du das "X" und "Alt + F4" deaktivieren. Wenn du oben rechts überhaupt nix angezeigt bekommen willst, stelle es mit ControlBox aus.

Also du musst einfach das WndProc überschreiben.


		protected override void WndProc(ref Message m)

		{

			if(m.Msg != 0x0010)

			{

				base.WndProc (ref m);

			}

			else

			{

				//Windows sendet die WM_CLOSE Nachricht an deine Form

				//Ignoriere sie und die Anwendung kann nicht geschlossen werden

			}

		}

Hoffe geholfen zu haben.

Tatsache, das Formular lässt sich noch mit Alt+F4 schließen. In der Hilfe steht allerdings unter Form.ControlBox-Eigenschaft etwas anderes:

Eigenschaftenwert

true, wenn im Formular in der linken oberen Ecke ein Systemmenüfeld angezeigt wird, andernfalls false. Der Standardwert ist true.

Hinweise

Wenn die ControlBox-Eigenschaft auf true festgelegt wird, wird das Systemmenüfeld in der linken oberen Ecke der Titelleiste angezeigt. Durch Klicken auf das Systemmenüfeld greift der Benutzer auf das Systemmenü zu.

Hinweis

Wenn im Formular kein Systemmenüfeld angezeigt wird, kann das Formular nicht mit der Tastenkombination ALT+F4 geschlossen werden.

Hinweis

Wenn für die ControlBox-Eigenschaft false festgelegt wurde, hat diese keine Auswirkungen auf ein untergeordnetes MDI-Formular (Multiple Document Interface), das zum Erstellungszeitpunkt maximiert angezeigt wird.

Aber dieser "Fehler" ist scheinbar bekannt.

private void Form_Closing(object sender, System.ComponentModel.CancelEventArgs e)

{

    e.Cancel = true;

}

  • 3 Monate später...

Und was tut man, wenn das bei einem nicht funktioniert?

Ich habe ein modal angezeigtes Formular (über showDialog) und möchte nicht, daß Form_Closing das Schliessen der Form bewirkt, nachdem ich sie z.B. mit Hide() verborgen habe.

Hab schon so einiges ausprobiert, aber es beendet sich dann trootzdem das komplette Programm weil "ShowDialog" dann ein Result meldet, obwohl es das nicht soll. :(

Ich habe ein modal angezeigtes Formular (über showDialog) und möchte nicht, daß Form_Closing das Schliessen der Form bewirkt, nachdem ich sie z.B. mit Hide() verborgen habe.

Kannst Du das nochmal bissl genauer erklären, ich verstehe Dein Problem nicht.

Das liegt bestimmt daran, dass heute Sonntag ist. :OD

Man ruft mit ShowDialog aus einer in einer eigenen Klasse befindlichen Main ein Formular auf, damit der Code erst weiter ausgeführt wird, wenn das Formular geschlossen wird, bzw ein dialogResult zurückkommt.

Eben dieses Ereignis (Form.close) tritt jetzt aber bereits auf, wenn das Formular in den Zustand der Unsichtbarkeit gesetzt wird. Und warum auch immer: Wenn man dort den EventArgs Member Cancel auf true setzt wird das allerliebst ignoriert.

Wenn man sich die Mühe machen möchte kann man auch die "OnClosing" Methode überschreiben und das Closing Ereignis nur ausführen lassen, wenn man es will; jegliche If Bedingung wird dort aber anscheinend de facto in die Wüste geschickt. Da will jemand unbedingt, daß DialogResult == Cancel ist, das spürt man ganz deutlich. ;)

Hab mein Programm jetzt umgestellt, sodaß dieses Formular jetzt nihct mehr modal aufgerufen wird, dann funktioniert alles wie mit Meister Propper geputzt.

Normalerweise macht man das in der Mainmethode auch mit

Application.Run(new MeinFormular());

Damit wird der Code weiter unten auch erst ausgeführt, wenn das Formular geschloßen wird.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.