Wie kann man die aktion eines Elementes in der Controlbox ändern ?

Goldman

Mitglied
Ich arbeite in Visual C# daran, dass das Formular 2 bei betätigen vom X im oberen rechten Rand, sich nicht schließt sondern minimiert.

Kann mir einer sagen, wie ich das machen kann ?
 
Ich kann dir leider nicht sagen wie es geht, aber um ehrlich zu sein würde ich das nicht machen da es den Anwender verwirrt. Und wenn jeder sich das so Programmiert wie er es gern hätte dann würde keiner mehr wissen wann das X schließt oder minimiert oder sonst irgendwas macht also benutz lieber die mitgelieferte minimieren Funktion.

MfG mgd-one
 
Das Formular 2 soll aber nicht geschlossen werden, sondern nur minimiert, da sonst ein fehler auftritt, wenn ich von form1 darauf zugreife.
 
Ich habe aber keine CloseBox also kann ich dieses element nicht unsichtbar machen.
Außerdem soll es bei klick aus X sich minimieren, weil dies nun mal so sein soll.
 
Nun, es gibt schon Anwendungen bei denen ein solches Vorgehen sinnvoll sein kann. Meine Firewall machts z.B. genauso. @ mgd-one

Nun zur Lösung des Problems. Man muss das Closing-Ereignis des Formulars abfangen.
Code:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   // Das "Schließen" abbrechen
   e.Cancel = true;
   
   // Fenster minimieren
   this.WindowState = FormWindowState.Minimized;
}

ABER: sei auf der Hut, das Fenster lässt sich so wie oben dargestellt GAR NICHT mehr schließen. Wenn Du Dein Form dennoch schließen mögtest, dann muss Du eine bool-Variable benutzen, die standardmäßig auf false ist. Wenn Du dann z.B. in Deinem Hauptmenü den Punkt "Programm beenden" auswählst, dann musst Du die Variable auf true setzen. Um den obigen Quelltext musst Du anschließend noch eine if-Anweisung darumbauen.

Ich veranschaue Dir das mal mit einem Button ... also bei einem Klick auf den selbigen soll das Formular geschlossen werden, ansonsten wirds minimiert.
Code:
// Member
private bool m_Close = false;

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
   if (!m_Close)
   {
      // Das "Schließen" abbrechen
      e.Cancel = true;

      // Fenster minimieren
      this.WindowState = FormWindowState.Minimized;
   }
}

private void button1_Click(object sender, System.EventArgs e)
{
   // Formular schließen
   m_Close = true;
   this.Close();
}

Eine Möglichkeit von vielen und sie sollte eigentlich klappen ... :)
 
Ich habe dies in mein Programm implementiert und es funktioniert wunderbar, allerdings ist ein Fehler aufgetreten und zwar, dass bei aktiviertem Programm das Abmelden von Windows gestoppt wird, weil es sich ja minimiert statt zu schließen.
 
Dann muss sich Dein Programm von Windows schließen lassen, dazu musst aber denk ich mal in die APIs von Windows rein. Hmm ... weiß ich leider jetzt auch nicht auswendig. *sorry* :(
 

Neue Beiträge

Zurück