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 Left
Move 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;
}
}
}
Cela dépend entièrement de la façon dont vous avez ajouté les nœuds, rien d'autre. –
@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. –
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