2010-06-15 12 views
7

Ich habe ein WinForm, das ich minimieren möchte, wenn auf das "x" in der oberen rechten Ecke geklickt wird. Um dies zu erreichen, habe ich:"x" Minimieren WinForm, ContextMenu WinForm zu schließen?

private void Form_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     e.Cancel = true; 
     WindowState = FormWindowState.Minimized; 
    } 

, dass alles gut ist und gut, aber jetzt habe ich ein Kontextmenü, das die Möglichkeit hat, die WinForm zu schließen, sondern auch wegen des Code oben, es minimiert einfach das Fenster.

Wie kann ich alles so einrichten, wie ich es möchte?

Antwort

10

Lassen Sie den Ereignishandler click einen bool Flag setzen, der im FormClosing Event-Handler verwendet wird.

Codebeispiel entkleidet:

public class YourForm : Form 
{  
    private bool _reallyClose; 

    private void ContextMenuClick(object sender, EventArgs e) 
    { 
     _reallyClose = true; 
     this.Close(); 
    } 

    private void Form_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (!_reallyClose) 
     { 
      e.Cancel = true; 
      WindowState = FormWindowState.Minimized; 
     } 
    } 

} 
+0

Danke für das Codebeispiel! :) – sooprise

+0

Arbeitete perfekt! – sooprise

0

Sie benötigen ein Flag zu setzen, wenn das Schließen Menü klicken. Sie können dann in FormClosing nach der Flagge suchen und nichts tun.

0

Sowohl das X- als auch das System-Kontextmenü senden die gleiche Windows-Meldung, glaube nicht, dass Sie die Aktion leicht trennen können. Es ist auch die Alt + F4 Nachricht.

Ich würde auch sagen, ich würde dieses nicht standardmäßige Verhalten nicht mögen, wenn ich das X treffe, möchte ich es geschlossen, nicht minimiert, das ist, was der Knopf 2 auf der linken Seite ist.

Vielleicht ist der beste Ansatz, um das Aussehen und das Gefühl, das Sie wollen, nicht die Standard-X-Schaltfläche anzuzeigen - deaktivieren Sie die Standardfunktion, sondern zeichnen Sie Ihre eigenen mit Ihrem eigenen Ereignis. Dies kann zu Problemen mit dem Systemkontextmenü führen, sodass Sie dort auch keine Option zum Schließen mehr haben.

+0

Ich habe vergessen zu erwähnen, dass dies für eine Tray-Anwendung ist. Wenn Sie also "x" drücken, wird das Fenster aus dem Blickfeld entfernt, aber die Anwendung läuft immer noch in der Schublade. – sooprise

+0

ist das Kontextmenü, das Sie aus dem Taskleistensymbol oder dem System aus der Titelleiste des Fensters, das Sie ausblenden möchten, oder einem anderen Kontextmenü bezieht? –

0

Können Sie den Absender überprüfen, um festzustellen, ob es ein Kontextmenuitem ist und entsprechend handeln?