Zum Inhalt springen

C#: Schliessen verhindern


Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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.

Geschrieben

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.

Geschrieben

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.

Geschrieben

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.

Geschrieben

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.

  • 3 Monate später...
Geschrieben

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. :(

Geschrieben
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

Geschrieben

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.

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...