2017-08-18 2 views
1

Je crée une application winforms dans laquelle l'utilisateur peut ajouter des nœuds à une arborescence en cliquant avec le bouton droit sur un nœud ou l'arrière-plan. Si l'utilisateur clique sur un nœud, le nouveau nœud devrait devenir l'enfant de ce nœud, sinon il sera ajouté à la racine de l'arborescence.Winforms: Détermine si l'arrière-plan de l'arborescence a cliqué sur

Mon problème est qu'il n'y a aucune fonction pour vérifier si l'arrière-plan est cliqué. Voici ce que j'ai jusqu'ici. Malheureusement, si un nœud est cliqué maintenant, l'enfant sera ajouté à la racine et au nœud parent.

private void treeView_MouseClick(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) addChild(null); 
} 

private void treeView_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) addChild(e.Node); 
} 

private void addChild(TreeNode parent) 
{ 
    TreeNode node = new TreeNode("new node"); 

    // If didn't click on a node, add to root, otherwise add to parent 
    if (parent == null) treeView.Nodes.Add(node); 
    else parent.Nodes.Add(node) 

    node.Parent.Expand(); 
} 

Répondre

2

déplacer votre code MouseClick-MouseUp (lorsque l'utilisateur presse le bouton de la souris). Puis vérifier par les coordonnées de la souris est là le noeud sur cet emplacement. Jetez un oeil à ce code:

private void treeView1_MouseUp(object sender, MouseEventArgs e) 
{ 
    var clickedNode = treeView1.GetNodeAt(e.X, e.Y); 
    if (clickedNode == null) 
    { 
     //clicked on background 
     addChild(null); 
    } 
    else 
    { 
     //clicked on node 
     addChild(clickedNode); 
    } 
} 
+0

Fonctionne comme un charme! – shadowsora