2010-07-28 9 views
5

Ich habe eine C# .net App. Also habe ich eine notifyIcon erstellt, die im Tray sitzt. Was ich tun möchte, ist, wenn der Benutzer die "x" -Taste auf dem Formular drückt, möchte ich, dass es in der Schublade schließt. Sie sollten das Programm nur über das Kontextmenü im Tray-Icon beenden können.C# in der Nähe von Tray (wie msn Messenger)

Also was ich getan habe, war auf dem Formular schließen Ereignis, ich überprüfe, ob das Formular sichtbar ist. Wenn es sichtbar ist, setze ich es auf unsichtbar und setze ShowInTaskbar auf false (Simulation minimize to tray) Wenn das Formular bereits unsichtbar ist, dann schließen sie es wahrscheinlich aus dem Tray, also werde ich das Programm in diesem Fall verlassen.

Das Problem, das ich habe, ist, dass, wenn das Fenster sichtbar ist, aber sie mit der rechten Maustaste auf das Kontextmenü des Tray-Symbols und drücken Sie Beenden, muss ich das Programm beenden und nicht minimieren.

Wie löse ich dieses Problem?

+0

Application.exit() wird nicht funktionieren, da das Ereignis weiterhin das Schließen des Formulars auslöst. Ich denke, wie einige Leute erwähnt haben, muss ich eine Flagge verwenden, um zu signalisieren, wo die Anfrage kommt (Tray-Menü vs x-Taste) –

Antwort

3

versuchen Sie dies:

bool _closingFromMenu; 

void NOTIFYICON_EXIT_MENU_HANDLER(object sender, EventArgs e) 
{ 
    _closingFromMenu = true; 
    Close(); 
} 

//form closing handler 
FormClosing +=(a,b) =>{ 
    if(_closingFromMenu){ 
     Close(); 
    } 
    else{ 
     e.Cancel = true; 
     //do minimize stuff; 
    } 
} 

oder wenn Sie nur eine Form haben, können Sie Application.Exit(); in Kontextmenü-Handler

0

Wahrscheinlich möchten Sie den Status der Anwendung basierend auf den Aktionen des Benutzers verfolgen, da dies nicht unbedingt im Status des Fensters widergespiegelt wird. Wenn der Benutzer "Beenden" aus dem Menü auswählt, müssen Sie ein Flag setzen, um anzuzeigen, dass Sie wirklich aufregen und nicht nur das Fenster ausblenden.

0

Sie Ihre Kontextmenü schließen Ereignis Anruf Application.Exit machen() aufrufen