2009-02-06 3 views
0

J'ai un menu contextuel avec quelques éléments. Un des éléments a un sous-menu (ou quel que soit son nom) avec quelques éléments (dépend des fichiers qu'il trouve). Ce que je veux faire, c'est quand je suis parti, cliquez sur l'un des sous-éléments que je veux qu'une chose se produise, et quand je clique droit, je veux que quelque chose se passe. Mon problème est que lorsque j'utilise filesToolStripMenuItem_DropDownItemClicked, je n'ai aucun MouseEventArgs dans le paramètre, donc je ne peux pas savoir quel bouton de la souris a été utilisé pour cliquer sur l'élément.Bouton de la souris dans ToolStripMenuItem

J'ai essayé de l'ajouter moi-même dans le paramètre, mais j'ai une erreur.

Est-ce que quelqu'un sait comment je peux résoudre ce problème? Donc, je peux savoir quel bouton de la souris a été utilisé pour cliquer sur le sous-élément (qui est un ToolStripMenuItem)?

Merci

edit: voici le code que j'utilise pour créer les sous-éléments:

IPHostEntry ipE = Dns.GetHostEntry(Dns.GetHostName()); 
IPAddress[] IpA = ipE.AddressList; 
for (int i = 0; i < IpA.Length; i++) 
{ 
     if (!IpA[i].ToString().Contains(":")) 
      cxItems.Items.Add(new ToolStripMenuItem(IpA[i].ToString())); 
} 

Et pour ces articles que je veux être en mesure de faire des choses différentes en fonction du bouton de la souris que j'utilise

Répondre

3
private void button2_Click(object sender, EventArgs e) 
    { 
     ToolStripMenuItem item1 = new ToolStripMenuItem("Menu1"); 
     ToolStripMenuItem subMenuitem1 = new ToolStripMenuItem("SubMenu"); 
     item1.DropDownItems.Add(subMenuitem1); 
     this.contextMenuStrip1.Items.Add(item1); 
     subMenuitem1.MouseDown += new MouseEventHandler(subMenuitem1_MouseDown); 
     this.contextMenuStrip1.Show(this.button2,new Point(0,0)); 
    } 

    void subMenuitem1_MouseDown(object sender, MouseEventArgs e) 
    { 
     //e.Button will determine which button was clicked. 
     MessageBox.Show(e.Button.ToString()); 
    } 

Cela devrait vous aider à démarrer.

RE: Vous êtes modifier:

Le problème est, vous êtes juste dire nouvelle ToolStripMenuItem (IpA [i] .toString()) sans tenir une référence. Voici comment vous devez le faire:

IPHostEntry ipE = Dns.GetHostEntry(Dns.GetHostName()); 
    IPAddress[] IpA = ipE.AddressList; 
    for (int i = 0; i < IpA.Length; i++) 
    { 
      if (!IpA[i].ToString().Contains(":")) 
      { 
       ToolStripMenuItem subItem = new ToolStripMenuItem(IpA[i].ToString()); 
       subItem.MouseDown += new MouseEventHandler(subItem_MouseDown); 
       cxItems.Items.Add(subItem); 
      } 
    } 

    void subMenuitem1_MouseDown(object sender, MouseEventArgs e) 
    { 
      //get a reference to the menu that was clicked 
      ToolStripMenuItem clickedMenu = sender as ToolStripMenuItem; 
      //e.Button will tell you which button was clicked. 
    } 
+0

Le problème est que je crée les sous-éléments au moment de l'exécution ou peu importe comment vous l'appelez. Comme il recherche des fichiers et s'il les trouve, il crée un élément pour chaque fichier. Donc je ne peux pas vraiment faire comme dans ton exemple. – sippa

+0

Postez le code de la façon dont vous créez les sbuitems, et je verrai si je peux vous aider. – BFree

+0

J'ai ajouté le code au message original maintenant. – sippa

0

Pouvez-vous accéder au sous-menuItem? Si c'est le cas, vous pouvez gérer l'événement MouseDown sur le sous-élément.

private System.Windows.Forms.ToolStripMenuItem optionToolStripMenuItem; 
private System.Windows.Forms.ToolStripMenuItem subitemToolStripMenuItem; 
private System.Windows.Forms.ToolStripMenuItem subItem2ToolStripMenuItem; 

public void init() 
{ 
    // 
    // optionToolStripMenuItem 
    // 
    this.optionToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 
    this.subitemToolStripMenuItem, 
    this.subItem2ToolStripMenuItem}); 
    this.optionToolStripMenuItem.Name = "optionToolStripMenuItem"; 
    this.optionToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
    this.optionToolStripMenuItem.Text = "Option"; 
    // 
    // subitemToolStripMenuItem 
    // 
    this.subitemToolStripMenuItem.Name = "subitemToolStripMenuItem"; 
    this.subitemToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
    this.subitemToolStripMenuItem.Text = "Subitem"; 
    // 
    // subItem2ToolStripMenuItem 
    // 
    this.subItem2ToolStripMenuItem.Name = "subItem2ToolStripMenuItem"; 
    this.subItem2ToolStripMenuItem.Size = new System.Drawing.Size(152, 22); 
    this.subItem2ToolStripMenuItem.Text = "SubItem2"; 
    this.subItem2ToolStripMenuItem.MouseDown += new System.Windows.Forms.MouseEventHandler(this.subItem2ToolStripMenuItem_MouseDown); 
    this.subItem2ToolStripMenuItem.Click += new System.EventHandler(this.subItem2ToolStripMenuItem_Click); 
} 

private bool wasRightClicked = false; 
private void subItem2ToolStripMenuItem_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
     wasRightClicked = true; 
} 
Questions connexes