如何在C#WinFrom的TreeView中,确定你用鼠标选中的是父节点还是子节点,在线等~~~

时间:2020-11-29 12:39:31
比如:
if(父节点被选中)
{
   事件处理
}
else if(子节点被选中)
{
   事件处理
}

高手帮帮忙,能给出具体方法就更好了,谢谢

13 个解决方案

#1


那如果既是父节点,又有子节点怎么办?

#2


to zhoulin777(天晴) 
其实我是想这样的:当父节点被选中时,将父节点的值传到一条SQL查询语句去,执行数据库的查询;当子节点被选中时,将子节点的值还有父节点的值都传到另一条SQL查询语句去,执行数据库的查询,不过这次的查询是带有筛选条件的。
在单击子节点时,得到的值是SheetTreeView.SelectedNode.Text,同时也能得到父节点的值SheetTreeView.SelectedNode.Parent.Text。
那请问有没有什么办法确定你用鼠标选中的是父节点还是子节点

#3


有没有高手会啊,能帮帮吗?

#4


正如前面所说,子节点和父节点是相对的。

如果是判断叶子节点,可以如下:
if( yourNode.Nodes.Count == 0 )
     Debug.WriteLine( "It's a leaf node!" );

#5


if(yourNode.parentNode["UID"].ToString()=yourNode["UID"].ToString())
{
    没有父结点
}
else
{
    有父结点
}

#6


还是不懂,能说清楚点吗?

to jinqinghai
我的TreeView控件里找不到“parentNode”这个属性,还有,这个“["UID"]”又是什么意思?

#7


to 还是不懂,能说清楚点吗?

对于一个树型结构,根节点是没有父节点,叶子节点是没有子节点外,其他节点都可以成为其子节点的父节点,其父节点的子节点。
例如:
A
|____B
     |_____C

来说,B节点可以是A的子节点,是C的父节点。

#8


把你的节点的唯一标识(比如说uid)存到节点的Tag属性上

if(yourNode.Parent.Tag.ToString()=yourNode.Tag.ToString())
{
    没有父结点
}
else
{
    有父结点
}

#9


这样吧,我还是把我的思路说出来吧:
从数据库绑定后的树是这样
sheet1
|____W419
|____W419
|
sheet2
|
|____W419
|____NH51
|
sheet3
|____SW20
|____W419

有两条SQL查询语句,1、根据返回的“表名”来查询表里所有的数据;2、根据返回的“表名”与“字段名”有筛选条件的来查询表里的数据。而我的表名与字段名是在TreeView控件单击某一节点返回的,如果我单击的是父节点也就是上面的“Sheet1”,则用“Sheet1”来做表名执行第一条查询语句;如果我单击的是子节点也就是上面的“SW20”,则返回“SW20”与它当前的父节点“Sheet3”来做表名与条件执行第二条查询语句,所以,现在的问题是如何判断我单击是父节点还是子节点。

#10


treeview1.SelectedNode.ParentNode==null,则表示为父结点

#11


你的树是2层,那么你可以取得当前节点的TEXT,那么根据你现在的情况,在Tree的SelectedIndexChange事件里面Microsoft.Web.UI.WebControls.TreeNode node = Tree1.GetNodeFromIndex(e.Node);这样就能取得节点,然后就能判断NODE的PARENTNODE属性了,如果有就取父节点。

#12


首先:
        public int NodeLevel(TreeNode n)//找出树中当前节点的级数
        {
            int i = 0;
            while (!(n.Parent == null))
            {
                n = n.Parent;
                i += 1;
            }
            return i;
        }
然后:
        private void SheetTreeView_AfterSelect(object sender, TreeViewEventArgs e
        {
                if (NodeLevel(e.Node).ToString() == "0")
                {
                   //选中父节点
                   //你要处理的事件
                }
                else if (NodeLevel(e.Node).ToString() == "1")
                {
                    //选中子节点
                   //你要处理的事件
                }
                else if (NodeLevel(e.Node).ToString() == "2")
                {
                    //选中孙节点
                   //你要处理的事件
                }
            }            
        }

搞定,就这样

#13


TO:watersuperman 
哈哈,谢谢你,用你的方法可行,问题解决了。

谢谢回复的高手大虾们,有你们的帮助真高兴,谢谢大家了。
我卖单了。

#1


那如果既是父节点,又有子节点怎么办?

#2


to zhoulin777(天晴) 
其实我是想这样的:当父节点被选中时,将父节点的值传到一条SQL查询语句去,执行数据库的查询;当子节点被选中时,将子节点的值还有父节点的值都传到另一条SQL查询语句去,执行数据库的查询,不过这次的查询是带有筛选条件的。
在单击子节点时,得到的值是SheetTreeView.SelectedNode.Text,同时也能得到父节点的值SheetTreeView.SelectedNode.Parent.Text。
那请问有没有什么办法确定你用鼠标选中的是父节点还是子节点

#3


有没有高手会啊,能帮帮吗?

#4


正如前面所说,子节点和父节点是相对的。

如果是判断叶子节点,可以如下:
if( yourNode.Nodes.Count == 0 )
     Debug.WriteLine( "It's a leaf node!" );

#5


if(yourNode.parentNode["UID"].ToString()=yourNode["UID"].ToString())
{
    没有父结点
}
else
{
    有父结点
}

#6


还是不懂,能说清楚点吗?

to jinqinghai
我的TreeView控件里找不到“parentNode”这个属性,还有,这个“["UID"]”又是什么意思?

#7


to 还是不懂,能说清楚点吗?

对于一个树型结构,根节点是没有父节点,叶子节点是没有子节点外,其他节点都可以成为其子节点的父节点,其父节点的子节点。
例如:
A
|____B
     |_____C

来说,B节点可以是A的子节点,是C的父节点。

#8


把你的节点的唯一标识(比如说uid)存到节点的Tag属性上

if(yourNode.Parent.Tag.ToString()=yourNode.Tag.ToString())
{
    没有父结点
}
else
{
    有父结点
}

#9


这样吧,我还是把我的思路说出来吧:
从数据库绑定后的树是这样
sheet1
|____W419
|____W419
|
sheet2
|
|____W419
|____NH51
|
sheet3
|____SW20
|____W419

有两条SQL查询语句,1、根据返回的“表名”来查询表里所有的数据;2、根据返回的“表名”与“字段名”有筛选条件的来查询表里的数据。而我的表名与字段名是在TreeView控件单击某一节点返回的,如果我单击的是父节点也就是上面的“Sheet1”,则用“Sheet1”来做表名执行第一条查询语句;如果我单击的是子节点也就是上面的“SW20”,则返回“SW20”与它当前的父节点“Sheet3”来做表名与条件执行第二条查询语句,所以,现在的问题是如何判断我单击是父节点还是子节点。

#10


treeview1.SelectedNode.ParentNode==null,则表示为父结点

#11


你的树是2层,那么你可以取得当前节点的TEXT,那么根据你现在的情况,在Tree的SelectedIndexChange事件里面Microsoft.Web.UI.WebControls.TreeNode node = Tree1.GetNodeFromIndex(e.Node);这样就能取得节点,然后就能判断NODE的PARENTNODE属性了,如果有就取父节点。

#12


首先:
        public int NodeLevel(TreeNode n)//找出树中当前节点的级数
        {
            int i = 0;
            while (!(n.Parent == null))
            {
                n = n.Parent;
                i += 1;
            }
            return i;
        }
然后:
        private void SheetTreeView_AfterSelect(object sender, TreeViewEventArgs e
        {
                if (NodeLevel(e.Node).ToString() == "0")
                {
                   //选中父节点
                   //你要处理的事件
                }
                else if (NodeLevel(e.Node).ToString() == "1")
                {
                    //选中子节点
                   //你要处理的事件
                }
                else if (NodeLevel(e.Node).ToString() == "2")
                {
                    //选中孙节点
                   //你要处理的事件
                }
            }            
        }

搞定,就这样

#13


TO:watersuperman 
哈哈,谢谢你,用你的方法可行,问题解决了。

谢谢回复的高手大虾们,有你们的帮助真高兴,谢谢大家了。
我卖单了。