Permalänk
Medlem

C# treeview hjälp

Jag har ett program som i grunden består av ett par flikar (Tab Controll) och i 2 av dessa så har jag varsin TreeView. Vad jag vill är att när jag klickar på en knapp i låt oss säga TabA så ska jag byta till TabB och samtidigt så ska en Node i TreeView:en i TabB bli vald. Det är här det kör fast.

Jag har denna kod:

private void mobGoTo_Click(object sender, EventArgs e) { if (mobLoot.SelectedItem != null) { tabControl.SelectedTab = Resources; //(1) String tree = mobLoot.SelectedItem.ToString(); if (tabControl.SelectedTab == Resources) { foreach (TreeNode tn in matTree.Nodes) //(2) { if (tn.Text == tree) { matTree.SelectedNode = tn; } } } } }

(1): Här så byter jag flik till TabB
(2): Här försöker jag söka igenom hela trädet efter en Node med namnet som sparats i Resources.

Jag lyckas att byta flik, men någonstans på vägen så verkar det som att den inte söker igenom trädet alls.

Permalänk

Kan det bero på att du bara söker igenom rotnoderna i trädet? I så fall borde en rekursiv sökning hjälpa, nått i stil med:

TreeNode RecursiveFindTreeNode(TreeNodeCollection tnc, string text) { var nodes = tnc.OfType<TreeNode>(); return nodes.FirstOrDefault(n => n.Text == text) ?? nodes.Select(n => RecursiveFindTreeNode(n.Nodes, text)).FirstOrDefault(n => n != null); }

och istället för där du har (2):

var tn = RecursiveFindTreeNode(matTree.Nodes, tree); if (tn != null) matTree.SelectedNode = tn;

Permalänk
Medlem

hmm, jag får det inte att funka...

Blev så här:

private void mobGoTo_Click(object sender, EventArgs e) { if (mobLoot.SelectedItem != null) { tabControl.SelectedTab = Resources; String tree = mobLoot.SelectedItem.ToString(); var tn = RecursiveFindTreeNode(matTree.Nodes, tree); if (tn != null) matTree.SelectedNode = tn; } } TreeNode RecursiveFindTreeNode(TreeNodeCollection tnc, string text) { var nodes = tnc.OfType<TreeNode>(); return nodes.FirstOrDefault(n => n.Text == text) ?? nodes.Select(n => RecursiveFindTreeNode(n.Nodes, text)).FirstOrDefault(n => n != null); }

Eller har jag gjort nått fel?

Permalänk

Nej jag ser inget fel där, så då är det antagligen nått annat.

Är du bekant med hur du debuggar i Visual Studio genom att sätta brytpunkter, stega genom koden och inspektera variabler, etc? Annars är det nått jag varmt kan rekommendera att du övar på.

Det du skulle kunna göra är att göra ett så litet projekt som möjligt där felet kan reproduceras, och posta en länk här så kan någon testa det och hjälpa dig att hitta felet.

Det borde för övrigt vara praxis för alla när man frågar om hjälp här.

Permalänk
Medlem

känner mig en aning dum nu... I String tree = mobLoot.SelectedItem.ToString(); den skulle vara lika med nått i listan. Dum som jag är så hade jag råkat skriva fel på alla, så att ingen stämde

Men nu funkar det, så tack för hjälpen