Avatar billede ezrider Nybegynder
17. april 2005 - 00:17 Der er 10 kommentarer

Højreklik på TreeNode i TreeView

Hej der

Jeg har et TreeView med en række TreeNodes. Jeg har knyttet en ContextMenu til mit TreeView, som kommer frem ved højreklik.

Hvordan får jeg den TreeNode, der højreklikket på, til at være TreeView.SelectedNode ?
Avatar billede burningice Nybegynder
17. april 2005 - 00:28 #1
ditTreeview.SelectedNode = ditTreeview.GetNodeAt(Cursor.Position);
Avatar billede ezrider Nybegynder
17. april 2005 - 09:32 #2
Ja det er også den løsning jeg har kunnet snuse mig frem til. Problemet er, at GetNodeAt metoden ikke genkendes af VS .NET. Hvorfor det?
Avatar billede burningice Nybegynder
17. april 2005 - 11:44 #3
hvordan kendes den ikke? får du compiler-fejl?
Avatar billede segato Nybegynder
17. april 2005 - 18:58 #4
using System;
using System.Windows.Forms;

namespace WebExtractor
{
    /// <summary>
    /// Summary description for CETreeView.
    /// </summary>
    public class TreeViewEx : System.Windows.Forms.TreeView
    {
        public TreeViewEx()
        {
            //
            // TODO: Add constructor logic here
            //
        }

        public TreeNode GetNodeFromIndex(int index)
        {
            TreeNode node = this.Nodes[0];

            for(int i = 0; i < index; i++)
            {
                if(node == null)
                {
                    return node;
                }
                node = node.NextVisibleNode;               
            }   
            return node;
        }

        public TreeNode GetNextNode(TreeNode curr_node)
        {
            TreeNode next_node = null;
            if(curr_node.FirstNode != null )
            {
                next_node = curr_node.FirstNode;
            }
            else if( curr_node.NextNode != null )
            {
                next_node = curr_node.NextNode;
            }
            else if( curr_node.Parent != null )
            {
                while(curr_node.Parent.NextNode != null & curr_node.Parent != null)
                {
                    curr_node = curr_node.Parent;                   
                }
                if(curr_node.Parent.NextNode != null)
                    next_node = curr_node.Parent.NextNode;
                else
                    next_node = null;
            }
            else
            {
                return null;
            }
            return next_node;           
        }

        public int GetIndexFromNode(TreeNode treeNode)
        {
            int nodecount = 0;
            if (treeNode !=null)
            {
                if(treeNode.TreeView == null)
                    return -1;

                TreeNode currNode = treeNode.TreeView.Nodes[0];
                while(currNode != treeNode)
                {   
                    if (currNode.FirstNode != null) // child node
                        currNode = currNode.FirstNode;
                    else if (currNode.NextNode != null) // next sibling
                        currNode = currNode.NextNode;
                    else                            // next sibling of parent
                    {
                        while(currNode.Parent.NextNode == null)
                        {
                            currNode = currNode.Parent;
                        }
                        currNode = currNode.Parent.NextNode;
                    }
                    nodecount++;
                }
                return nodecount;
            }
            else
            {
                return -1;
            }               
        }
    }
}

har en lille klasse der gør det samme.
Avatar billede segato Nybegynder
17. april 2005 - 18:58 #5
int index = GetIndexFromNode(dinNode);
Avatar billede burningice Nybegynder
17. april 2005 - 20:28 #6
segato>> hvordan vil du med din kode kunne finde ud af hvilken node man har højre-klikket på?
Avatar billede segato Nybegynder
17. april 2005 - 21:10 #7
Det kan man ik med den kode man kan kun få et index fra en node eller en node fra et index. Havde ik læst hele tråden ordenligt:D Treeview har som du siger en GetIndexAt(..). Fessor har givet dig den rigtige løsning hvis du ikke har den funktion så er der noget grueligt galt.
Avatar billede ezrider Nybegynder
18. april 2005 - 17:37 #8
Så er der desværre noget grueligt galt :( Her er compiler-fejlen:

'System.Windows.Forms.TreeView' does not contain a definition for 'GetNodeAt'
Avatar billede burningice Nybegynder
18. april 2005 - 17:43 #10
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester