2010-04-07 8 views
0

J'ai créé un programme non sous forme C# qui utilise la classe NotifyIcon.WinForms Taskbar Icon - Cliquez sur l'événement non mise à feu

Le texte "(Cliquez pour activer)" apparaît lorsque je passe la souris. Donc, je reçois des événements gérés.

Cependant, l'événement "Click" ne se déclenche pas et le menu contextuel n'apparaît pas.

public class CTNotify 
{ 
    static NotifyIcon CTicon = new NotifyIcon(); 
    static ContextMenu contextMenu = new ContextMenu(); 

    static void Main() 
    { 
     //Add a notify Icon 
     CTicon.Icon = new Icon("CTicon.ico"); 
     CTicon.Text = "(Click to Activate)"; 
     CTicon.Visible = true; 
     CTicon.Click += new System.EventHandler(CTicon_Click); 

     //Create a context menu for the notify icon 
     contextMenu.MenuItems.Add("E&xit"); 

     //Attach context menu to icon 
     CTicon.ContextMenu = contextMenu; 

     while (true) //Infinite Loop 
     { 
      Thread.Sleep(300); //wait 
     } 
    } 

    private static void CTicon_Click(object sender, System.EventArgs e) 
    { 
     MessageBox.Show("Clicked!"); 
    } 
} 

Répondre

2

Jetez un oeil à la méthode API Shell_NotifyIcon(), celle qui implémente un NotifyIcon. Cliquez sur la structure NOTIFYICONDATA. Le deuxième membre de cette structure est une poignée de fenêtre:

Une poignée à la fenêtre qui reçoit notifications associées à une icône dans la zone de notification

Vous ne disposez pas d'une fenêtre et peut donc ne pas recevoir de notifications. Vous devez mettre le NotifyIcon sur un formulaire. Et utilisez Application.Run() pour obtenir les notifications et activer les gestionnaires d'événements.

Gardez votre forme cachée en collant ce code:

protected override void SetVisibleCore(bool value) { 
     if (!this.IsHandleCreated) { 
      this.CreateHandle(); 
      value = false; 
     } 
     base.SetVisibleCore(value); 
    } 
2

Pourquoi ne pas créer une application sous forme, et lors de l'initialisation simplement masquer le formulaire? Je n'ai jamais eu de problème avec l'icône de notification utilisant cette approche

0

J'ai le même problème, lorsque j'utilise l'événement .hide() pour cacher la forme ou la SetVisibleCore que Hans fournissent, le clic ou tout les événements de la souris ne se déclencheront pas.

Est-ce que quelqu'un a une autre solution?

P.S. Alors que la forme est visible, tout fonctionne bien.

Questions connexes