2010-12-02 13 views
0

Mon code pour ouvrir un menu contextuel sur le bouton droit sur une vue arborescente est la suivanteComment puis-je résoudre le problème pour le menu contextuel pour Treeview cliquez sur

private void contextMenu_Opening(object sender, CancelEventArgs e) 
    { 
     if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 1) 
     { 
      contextMenu.Items.Add(New); 
      contextMenu.Items.Remove(Remove); 
      contextMenu.Items.Remove(Saveas); 
      contextMenu.Items.Remove(Save); 
      contextMenu.Items.Remove(addEntry); 
     } 
     if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 2) 
     { 
      contextMenu.Items.Add(New); 
      contextMenu.Items.Remove(Remove); 
      contextMenu.Items.Remove(Saveas); 
      contextMenu.Items.Remove(Save); 
      contextMenu.Items.Remove(addEntry); 
      New.Text = "Add FileHeader"; 
     } 
     if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 3) 
     { 
      contextMenu.Items.Remove(New); 
      contextMenu.Items.Add(Save); 
      contextMenu.Items.Add(Saveas); 
      contextMenu.Items.Remove(Remove); //Added later 
      contextMenu.Items.Remove(addEntry); 
     } 
     if (tvwACH.SelectedNode.Parent != null) 
     { 
      string str = tvwACH.SelectedNode.Parent.ToString().Substring(10); 
      if (str == "BatchHeader") 
      { 
       contextMenu.Items.Remove(New); 
       contextMenu.Items.Remove(Save); 
       contextMenu.Items.Remove(Remove); 
       contextMenu.Items.Remove(Saveas); 
       contextMenu.Items.Add(addEntry); 
      } 
     } 

et aussi la souris vers le bas pour TreeView comme suit

private void tvwACH_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      contextMenu.Show(tvwACH, e.Location); 
     } 
     location = e.Location; 
    } 

Mais cela se ouvre partout sur le contrôle de vue arborescente, mais j'ai seulement besoin d'être ouvert quand je clique sur les nœuds de ma vue arborescente.

Toute aide s'il vous plaît

Répondre

1

Si vous ne voulez que le menu contextuel à afficher lorsque l'utilisateur droit-clique sur un nœud, vous devez inclure une certaine logique dans votre clapoteuses pour vérifier que l'événement click événement MouseDown a eu lieu sur un noeud.

Vous pouvez déterminer le noeud situé à un point particulier à l'aide du HitTest method fourni par le TreeView. Par exemple, vous pouvez modifier votre gestionnaire d'événements MouseDown actuel pour inclure le code suivant:

private void tvwACH_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
    { 
     if (tvwACH.HitTest(e.Location).Node != null) 
     { 
      contextMenu.Show(tvwACH, e.Location); 
     } 
    } 
}