2009-03-05 20 views
7

Estoy usando un control NotifyIcon en uno de mis formularios secundarios (modales) y funciona bien. Mostrar las puntas de los globos como se esperaba, manejar los eventos del ratón, etc. ... Sin embargo, no desaparecen cuando esperaba. Específicamente, cuando salgo del formulario secundario y el padre vuelve a tener el control, el icono aún permanece. Se puede acceder a información sobre herramientas, por lo que está "vivo" por así decirlo.¿Cómo se garantiza que NotifyIcon desaparezca?

Cuando salgo de la aplicación como un todo, la imagen permanece hasta el momento en que coloco el cursor sobre ella. Una vez moused desaparece.

¿Cómo puedo lograr que se comporte normalmente? Ok, normalmente es una mala palabra: -0 ¿Cómo puedo hacer que desaparezca cuando desaparece la forma que lo creó?

¿Alguien podría explicar lo que está causando esto también, pensé que se suponía que .net debía limpiarlo?

G

EDIT: Si llamo al método Dispose en forma cerrada evernt Esto funciona, pero es lo que realmente tiene que hacer esto? G

Respuesta

5

He aquí un pensamiento, no estoy seguro de si esto marcará la diferencia, pero ¿está llamando a Dispose() en NotifyIcon cuando se cierra el formulario secundario?

EDIT: Acaba de ver su edición, sí, no me sorprende que esto ayude, y sí, debería hacerlo. Debajo de las cubiertas, algo está usando recursos no administrados, y necesitas liberarlo. Generalmente, cualquier cosa en su aplicación que implemente identificable que esté usando, hágase un favor y deséchelo.

+0

Guau, respuesta rápida :-) Acabo de mencionar eso en mi edición. Sí, esto funciona, pero ¿por qué tengo que hacer esto con estos controles pero no con otros? –

+0

Gracias, +1, aceptado, esto me ha planteado una nueva pregunta, no del todo relacionada, así que la publicaré por separado –

+0

Pero, si NotifyIcon está en el formulario secundario (es decir, el formulario es el propietario), shouldn ' ¿Llamar a Dispose en el formulario también disponer de NotifyIcon? ¿O no se deshizo de la forma? – OregonGhost

5
Icon.Visible = false 

también funcionaría. De todos modos, todavía se debe llamar al Dispose para desechar el identificador de Windows.

1

This question es similar.

Si está de acuerdo con nuevas instancias del programa que limpian la bandeja del sistema en lugar de intentar garantizar la limpieza en cualquier tipo de apagado, el following simula una limpieza de la bandeja de notificaciones. Utiliza una solución SendMessage que simula una limpieza del mouse del usuario que no implica la necesidad de mover realmente el cursor del usuario.

Tenga en cuenta que en las máquinas con Windows 7, el nombre Notification Area debe reemplazarse por User Promoted Notification Area.

Cuestiones relacionadas