2009-03-05 13 views
7

Sto utilizzando un controllo NotifyIcon in uno dei miei moduli figlio (modali) e funziona correttamente. Esponendo le punte dei palloncini come previsto, gestendo gli eventi del mouse ecc. Tuttavia non scompare quando mi aspetterei che ciò accada. Nello specifico, quando esco dal modulo figlio e il genitore è di nuovo in controllo, l'icona rimane ancora. Il tooltip è accessibile, quindi è molto "vivo" per così dire.Come garantire che un NotifyIcon scompaia?

Quando ho quindi uscire la mia domanda nel suo complesso l'immagine rimane ancora fino al punto mi passa il mouse sopra il cursore. Una volta fatto il segno del mouse, scompare.

Come posso ottenere a comportarsi normalmente? Ok normalmente è una parolaccia: -0 Come posso far sparire quando il modulo che lo ha creato scompare?

qualcuno potrebbe spiegare che cosa sta causando questo pure, ho pensato .net doveva pulire dopo se stessa?

G

EDIT: Se chiamo il metodo Dispose in forma chiusa evernt questo funziona, ma devo davvero fare questo? G

risposta

5

Ecco un pensiero, non so se questo farà la differenza, ma stai chiamando Dispose() sul NotifyIcon quando il form figlio si chiude?

EDIT: Appena visto tua modifica, sì, non mi stupisce che questo aiuta, e sì si dovrebbe fare. Sotto le coperte qualcosa sta usando alcune risorse non gestite, e devi rilasciarlo. Generalmente, qualsiasi cosa nella tua app che implementa IDisposable che stai usando, fai un favore a te stesso e Smaltisci.

+0

Wow, risposta veloce :-) Ho appena detto che nella mia modifica. Sì, funziona, ma come mai devo fare questo con questi controlli ma non con gli altri? –

+0

Grazie, +1, accettato, questo ha sollevato una nuova domanda per me, non interamente correlata, quindi la pubblicherò separatamente –

+0

Ma, se il NotifyIcon è sul modulo figlio (cioè il modulo è il proprietario), shouldn ' t Chiamare Dispose sul modulo dispone anche di NotifyIcon? O non hai smaltito il modulo? – OregonGhost

5
Icon.Visible = false 

funzionerebbe anche. Ad ogni modo, Dispose dovrebbe ancora essere chiamato per eliminare l'handle di Windows.

1

This question è simile.

Se stai bene con le nuove istanze del programma di pulizia del vassoio di sistema invece di cercare di garantire la pulizia su qualsiasi tipo di arresto, lo following simula una pulizia del vassoio di notifica. Utilizza una soluzione SendMessage che simula una pulizia del mouse dell'utente che non implica la necessità di spostare effettivamente il cursore dell'utente.

Si noti che su macchine Windows 7 il nome Notification Area deve essere sostituito con User Promoted Notification Area.

Problemi correlati