2017-02-20 3 views
1

Je me demandais s'il était possible avec un TreeView dans un formulaire Windows d'ajouter ou de supprimer un niveau?Ajout ou suppression d'un niveau à un TreeNode

Par exemple: mon TreeView est comme cela pour commencer:

ParentNode 
| Child1 
| Child2 

si l'utilisateur clique sur un bouton pour ajouter un niveau CHILD2 il devient:

ParentNode 
| Child1 
| | Child1.1 

Il y a aa Node.Level fonction mais seulement utilisable pour obtenir le niveau et ne pas le régler.

EDIT:
Les nœuds sont construits automatiquement, le niveau est assigné en fonction du style d'une cellule Excel. Le problème est, il arrive que le noeud créé n'est pas à la bonne place car le fichier Excel n'est pas bien fait. Donc, je vois 2 options o résoudre ce problème:

1- l'utilisateur modifie le fichier excel directement
2- créer un bouton Move LeftMove Right sur une sélection de noeuds.

Je voudrais offrir la 2ème possibilité.

Voici le code que je construisais les nœuds:

public static void AddNodes(Excel.Application app, 
            TreeView treeView) 
    { 
     Excel.Range selection = app.Selection; 

     ArrayList style = new ArrayList(); 

     TreeNode parentNode = treeView.SelectedNode; 

     //Selected Node => Last used node 
     for (int i = 1; i <= selection.Rows.Count; i++) 
     { 
      TreeNode tn; 

      int fontSize = Convert.ToInt32(selection.Cells[i].Font.Size); 

      if (!style.Contains(fontSize)) 
      { 
       style.Add(fontSize); 
      } 

      else if (style[style.Count - 1].Equals(fontSize)) 
      { 
       try 
       { 
        treeView.SelectedNode = treeView.SelectedNode.Parent; 
       } 
       catch (Exception x) 
       { 
        ErrorBox(x); 
       } 
      } 

      else 
      { 
       int indexPreviousCellofSameColor = style.IndexOf(fontSize); 

       //Select TN parent 
       for (int j = 1; j <= (style.Count - indexPreviousCellofSameFont); j++) 
       { treeView.SelectedNode = treeView.SelectedNode.Parent; } 

       style.RemoveRange(indexPreviousCellofSameFont + 1, style.Count - indexPreviousCellofSameFont - 1); 
      } 

      if (selection.Cells[i].Value2 == null) 
      { 
       //if empty cell, do something ... or nothing 
       treeView.SelectedNode = treeView.SelectedNode.LastNode; 
      } 
      else 
      { 
       //Add new TN to parent - TN object corresponds to excel cell 
       tn = new TreeNode() 
       { 
        Text = selection.Cells[i].Value2, 
        Tag = selection.Cells[i], 
       }; 
       treeView.SelectedNode.Nodes.Add(tn); 
       tn.ToolTipText = tn.Level.ToString(); 

       //selected TN => created TN 
       treeView.SelectedNode = tn; 
      } 
     } 
    } 
+0

Cela dépend entièrement de la façon dont vous avez ajouté les nœuds, rien d'autre. –

+0

@HansPassant voulez-vous que j'ajoute le code de la façon dont je construis les nœuds? Honnêtement, je ne vois pas comment cela peut influencer le déplacement du nœud vers la gauche ou vers la droite. –

+0

Je ne comprends pas le problème. Lorsque vous ajoutez un nœud à une arborescence, vous devez entrer le nœud parent en tant que paramètre, ce qui dans votre exemple sera Child1. Quel est le problème que vous rencontrez? – GuidoG

Répondre

2

je devais changer ma réponse complètement à la question a été modifiée. Cela semble faire le travail dans mes tests. Il déplace le nœud sélectionné à un nouveau niveau, sous celui qui était juste au-dessus. Il faut plus de contrôles biensur pour vous assurer que vous n'êtes pas en mouvement des nœuds à l'oubli ...

private void button1_Click(object sender, EventArgs e) 
{ 
    TreeNode selected = treeViewFilter.SelectedNode; 
    TreeNode parent = selected.Parent; 

    // find the node just above the selected node 
    TreeNode prior = parent.Nodes[selected.Index - 1]; 

    if (parent != prior) 
    { 
     treeViewFilter.Nodes.Remove(selected); 
     prior.Nodes.Add(selected); 
    } 
} 
+0

désolé, mal classé "edit" sur votre réponse ... –

+0

Il fait l'affaire! Je vais le modifier un peu pour que je puisse me déplacer vers la gauche aussi. Merci beaucoup pour votre temps! –

+1

pas de problème. C'est là que ce site est là pour – GuidoG