Bonjour,
Je voudrais récupérer dans un treeview, le treeViewItem qui a le champ header = "nom".
Merci.
Lucie
Bonjour,
Je voudrais récupérer dans un treeview, le treeViewItem qui a le champ header = "nom".
Merci.
Lucie
Salut,
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 var treeView = new TreeView(); treeView.Items.Add(new TreeViewItem { Header = "Patate"} ); treeView.Items.Add(new TreeViewItem { Header = new TextBlock() }); treeView.Items.Add(new TreeViewItem { Header = "nom"} ); TreeViewItem monItem; foreach (TreeViewItem item in treeView.Items) { if (item.Header is String && item.Header.ToString() == "nom") { monItem = item; break; } }
Cela ne fonctionne pas car j'ai des noeuds enfants sur chaque treeviewitem, il faut que j'aille chercher dans tous les noeuds enfants. J'ai fait une fonction récursive mais le problème c'est qu'il n'attend pas la fin de l'exécution de ma fonction récursive avant d'exécuter la suite.
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 private TreeViewItem FindNode(ItemContainerGenerator gen, ItemCollection items, string value) { TreeViewItem oResult = null; foreach (var oItem in items) { TreeViewItem oTreeViewItem = (TreeViewItem)gen.ContainerFromItem(oItem); if (oTreeViewItem == null) { continue; } if (oTreeViewItem.Header.ToString() == value) { oResult = oTreeViewItem; break; } if (oTreeViewItem.Items.Count > 0) { //oTreeViewItem.IsExpanded = true; if (oTreeViewItem.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated) { oTreeViewItem.ItemContainerGenerator.StatusChanged += delegate { oResult = FindNode(oTreeViewItem.ItemContainerGenerator, oTreeViewItem.Items, value); }; } else { oResult = FindNode(oTreeViewItem.ItemContainerGenerator, oTreeViewItem.Items, value); } if (oResult != null) { break; } } } return oResult; }
puis je fais
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TreeViewItem item = FindNode(arbreMetadonnees.ItemContainerGenerator, arbreMetadonnees.Items,"nom"); item.Focus();
Il exécute item.Focus() avant d'avoir terminer l'exécution de ma fonction FindNode.
Bonjour LucieLemon,
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 public TreeViewItem GetNode(string value) { TreeViewItem node = null; List<TreeViewItem> ItemList = trv.Items.Cast<TreeViewItem>().ToList(); foreach (TreeViewItem item in trv.Items) { if (item.Header is String && item.Header.ToString() == value) { node = item; break; } else { node = _GetNodeInChildren(item, value); if (node != null) break; } } return node; } private TreeViewItem _GetNodeInChildren(TreeViewItem nodeSource, string value) { TreeViewItem node = null; if (nodeSource == null) return null; bool isExpanded = nodeSource.IsExpanded; //expand le node si besoin (obligé pour chercher dedans) if (!isExpanded) { nodeSource.IsExpanded = true; nodeSource.UpdateLayout(); } //recherche dedans de manière récursive foreach (TreeViewItem item in nodeSource.Items) { if (item.Header is String && item.Header.ToString() == value) { node = item; break; } TreeViewItem tvi = null; tvi = _GetNodeInChildren(item, value); if (tvi != null) { node = tvi; break; } } //referme le node si ouvert pour la recherche (=aspect initial) if (node == null && nodeSource.IsExpanded != isExpanded) nodeSource.IsExpanded = isExpanded; if (node != null) nodeSource.IsExpanded = true; return node; }
Et pour utiliser :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part TreeViewItem tvi = GetNode("Header2-5");
tvi est null si la recherche est infructueuse...
En espérant que ça t'aide
@+
Merci pour ta réponse.
Je vais essayer ce que tu m'a envoyé.
Partager