2009-03-05 3 views
7

Ich verwende ein NotifyIcon-Steuerelement in einem meiner untergeordneten (modalen) Formulare und es funktioniert gut. Ballon-Tipps wie erwartet ablaufen lassen, Mausereignisse handhaben usw. Es verschwindet jedoch nicht, wenn ich es erwarte. Insbesondere, wenn ich das untergeordnete Formular verlasse und das übergeordnete Element wieder unter Kontrolle ist, bleibt das Symbol erhalten. Es ist Tooltip zugänglich, so dass es sozusagen "lebendig" ist.Wie kann ich garantieren, dass NotifyIcon verschwindet?

Wenn ich dann meine Anwendung als Ganzes verlasse, bleibt das Bild bis zum Punkt, wo ich den Mauszeiger darüber halte. Nach dem Mausklick verschwindet es.

Wie kann ich es normal verhalten? Ok ist normalerweise ein schlechtes Wort: -0 Wie kann ich es verschwinden lassen, wenn das Formular, das es erstellt hat, verschwindet?

Könnte jemand erklären, was das auch verursacht, dachte ich .net sollte nach sich aufräumen?

G

EDIT: Wenn ich die Dispose-Methode in Form nennen geschlossen evernt dies funktioniert, aber ich dies zu tun, wirklich? G

Antwort

5

Hier ist ein Gedanke, nicht sicher, ob dies einen Unterschied machen wird, aber rufen Sie Dispose() auf der NotifyIcon, wenn das untergeordnete Formular schließt?

EDIT: Nur Ihre Bearbeitung gesehen, ja ich bin nicht überrascht, dass dies hilft, und ja, Sie sollten es tun. Unter dem Deckmantel verwendet etwas unmanaged Ressourcen, und Sie müssen es freigeben. Im Allgemeinen tun Sie alles in Ihrer App, die IDisposable implementiert, die Sie verwenden, tun Sie sich einen Gefallen und Entsorgen Sie es.

+0

Wow, schnelle Antwort :-) Gerade erwähnt, dass in meinem Schnitt. Ja, das funktioniert, aber warum muss ich das mit diesen Kontrollen tun, aber nicht mit anderen? –

+0

Danke, +1, akzeptiert, dies hat eine neue Frage für mich aufgeworfen, nicht ganz verwandt, also werde ich es separat posten –

+0

Aber, wenn die NotifyIcon auf dem Kindformular ist (dh das Formular ist der Besitzer), sollte nicht ' t Rufen Sie Dispose auf dem Formular auch über die NotifyIcon? Oder hast du nicht über das Formular verfügt? – OregonGhost

5
Icon.Visible = false 

würde auch funktionieren. Wie auch immer, Dispose sollte immer noch aufgerufen werden, um den Windows-Handle zu beseitigen.

1

This question ist ähnlich.

Wenn Sie mit neuen Programminstanzen einverstanden sind, die das System-Fach bereinigen, anstatt zu versuchen, die Bereinigung bei jeder Art von Herunterfahren zu garantieren, simuliert das following eine Bereinigung des Benachrichtigungsfachs. Es verwendet eine SendMessage-Lösung, die eine Benutzer-Mouse-Over-Bereinigung simuliert, bei der der Cursor des Benutzers nicht tatsächlich verschoben werden muss.

Beachten Sie, dass auf Windows 7-Computern der Name Notification Area durch User Promoted Notification Area ersetzt werden sollte.