中国
广东
广州
深圳
安徽
合肥
.......
我选项中广东时,下面的广州,深圳也选上,选中国时都选上,大致是这样的.然后得到选中的值,这个过程怎么实现,要源码.谢谢.,
18 个解决方案
#1
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
TreeNode n = e.Node;
CheckSubNode(n.Nodes, true);
}
//用这个
void CheckSubNode(TreeNodeCollection nodes, bool isChecked)
{
foreach(TreeNode node in nodes)
{
node.Checked = isChecked;
if (node.Nodes.Count>0)
{
CheckSubNode(node.Nodes, isChecked);
}
}
}
{
TreeNode n = e.Node;
CheckSubNode(n.Nodes, true);
}
//用这个
void CheckSubNode(TreeNodeCollection nodes, bool isChecked)
{
foreach(TreeNode node in nodes)
{
node.Checked = isChecked;
if (node.Nodes.Count>0)
{
CheckSubNode(node.Nodes, isChecked);
}
}
}
#2
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
CheckSubNode(e.Node.Nodes, e.Node.Checked);
}
{
CheckSubNode(e.Node.Nodes, e.Node.Checked);
}
#3
偶还没明白你用的哪个treeview哩!BS还是CS那个 方法不一样地
#4
哦 没注意题目 当我没说 !上面老大们也解决了 呵呵
#5
楼主说了是 winform!
#6
就是一个递归调用
#7
鼎鼎强,你不用上班吗,
怎么到处都上你回的帖啊!
呵呵!
怎么到处都上你回的帖啊!
呵呵!
#8
鼎鼎强,上面已写了是winform.c/s 的.我的QQ是:408954312.高手们在讲解问题的时候能不能留下高人们的QQ或MSN号.谢谢了.还没有思路啊.等待....
#9
private void tvList_BeforeSelect
(object sender,System.Windows.Forms.TreeViewCancelEventArgs e)
{
txtShow.Text=e.Node.Text;
}
加一句代码就行了 txtShow.Text=e.Node.Text;
放到 treeview1_BeforeSelect 这个事件里
(object sender,System.Windows.Forms.TreeViewCancelEventArgs e)
{
txtShow.Text=e.Node.Text;
}
加一句代码就行了 txtShow.Text=e.Node.Text;
放到 treeview1_BeforeSelect 这个事件里
#10
我靠,高手就是高手啊.运行了一下,果然可以啊.我选中的这些值怎么得到,然后怎么去分别他们.谢谢.搞完结帖.
#11
刚才偶得帖子没说清楚,txtShow是显示选中节点值得文本框,tvlist是treeview控件
msn:breeze_1982@hotmail.com
msn:breeze_1982@hotmail.com
#12
breeze_82(一天学一点) :txtShow哪里来的
#13
weisunding(鼎鼎) ,你号是多少,我还有不明白的地方,想当面请教.谢谢.
#14
多选的值我还是得不到啊.等等.....
#15
鼎鼎的代码并不全。他只是影响了子节点,但父节点并没有。
bool blJmp = false;//标志
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(this.blJmp)return;
foreach(TreeNode tn in e.Node.Nodes)//影响子节点
{
tn.Checked = e.Node.Checked;
}
this.blJmp = true;
this.SetCheck(e.Node);//处理父节点
this.blJmp = false;
}
private void SetCheck(TreeNode n)
{
if(n.Checked)//如果当前节点选中,则父节点也要选取中
{
this.parentNode(n,n.Checked);
}
else//如果当前节点没有选中,且同级节点中都没有选中,则父节点也不要选中
{
if(n.Parent != null)
{
//如果同一级中没有被选中,则其父级也同时设为不选中,在这种情况下,递归父节点
if(this.nextNotCheck(n.Parent.FirstNode))
{
n.Parent.Checked = false;
this.SetCheck(n.Parent);
}
}
}
}
private void parentNode(TreeNode n,bool check)
{
if(n.Parent != null)
{
n.Parent.Checked = check;
this.parentNode(n.Parent,check);
}
}
//下一个节点是不是没有选中
private bool nextNotCheck(TreeNode n)
{
if(n.Checked) return false;
if(n.NextNode == null) return true;
return this.nextNotCheck(n.NextNode);
}
bool blJmp = false;//标志
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(this.blJmp)return;
foreach(TreeNode tn in e.Node.Nodes)//影响子节点
{
tn.Checked = e.Node.Checked;
}
this.blJmp = true;
this.SetCheck(e.Node);//处理父节点
this.blJmp = false;
}
private void SetCheck(TreeNode n)
{
if(n.Checked)//如果当前节点选中,则父节点也要选取中
{
this.parentNode(n,n.Checked);
}
else//如果当前节点没有选中,且同级节点中都没有选中,则父节点也不要选中
{
if(n.Parent != null)
{
//如果同一级中没有被选中,则其父级也同时设为不选中,在这种情况下,递归父节点
if(this.nextNotCheck(n.Parent.FirstNode))
{
n.Parent.Checked = false;
this.SetCheck(n.Parent);
}
}
}
}
private void parentNode(TreeNode n,bool check)
{
if(n.Parent != null)
{
n.Parent.Checked = check;
this.parentNode(n.Parent,check);
}
}
//下一个节点是不是没有选中
private bool nextNotCheck(TreeNode n)
{
if(n.Checked) return false;
if(n.NextNode == null) return true;
return this.nextNotCheck(n.NextNode);
}
#16
楼主给我回消息有什么问题,是取多选的值吗??
#17
是多选的取值,你的号多少啊.
#18
n.Parent.Checked中,n.Parent没有Checked属性.
#1
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
TreeNode n = e.Node;
CheckSubNode(n.Nodes, true);
}
//用这个
void CheckSubNode(TreeNodeCollection nodes, bool isChecked)
{
foreach(TreeNode node in nodes)
{
node.Checked = isChecked;
if (node.Nodes.Count>0)
{
CheckSubNode(node.Nodes, isChecked);
}
}
}
{
TreeNode n = e.Node;
CheckSubNode(n.Nodes, true);
}
//用这个
void CheckSubNode(TreeNodeCollection nodes, bool isChecked)
{
foreach(TreeNode node in nodes)
{
node.Checked = isChecked;
if (node.Nodes.Count>0)
{
CheckSubNode(node.Nodes, isChecked);
}
}
}
#2
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
CheckSubNode(e.Node.Nodes, e.Node.Checked);
}
{
CheckSubNode(e.Node.Nodes, e.Node.Checked);
}
#3
偶还没明白你用的哪个treeview哩!BS还是CS那个 方法不一样地
#4
哦 没注意题目 当我没说 !上面老大们也解决了 呵呵
#5
楼主说了是 winform!
#6
就是一个递归调用
#7
鼎鼎强,你不用上班吗,
怎么到处都上你回的帖啊!
呵呵!
怎么到处都上你回的帖啊!
呵呵!
#8
鼎鼎强,上面已写了是winform.c/s 的.我的QQ是:408954312.高手们在讲解问题的时候能不能留下高人们的QQ或MSN号.谢谢了.还没有思路啊.等待....
#9
private void tvList_BeforeSelect
(object sender,System.Windows.Forms.TreeViewCancelEventArgs e)
{
txtShow.Text=e.Node.Text;
}
加一句代码就行了 txtShow.Text=e.Node.Text;
放到 treeview1_BeforeSelect 这个事件里
(object sender,System.Windows.Forms.TreeViewCancelEventArgs e)
{
txtShow.Text=e.Node.Text;
}
加一句代码就行了 txtShow.Text=e.Node.Text;
放到 treeview1_BeforeSelect 这个事件里
#10
我靠,高手就是高手啊.运行了一下,果然可以啊.我选中的这些值怎么得到,然后怎么去分别他们.谢谢.搞完结帖.
#11
刚才偶得帖子没说清楚,txtShow是显示选中节点值得文本框,tvlist是treeview控件
msn:breeze_1982@hotmail.com
msn:breeze_1982@hotmail.com
#12
breeze_82(一天学一点) :txtShow哪里来的
#13
weisunding(鼎鼎) ,你号是多少,我还有不明白的地方,想当面请教.谢谢.
#14
多选的值我还是得不到啊.等等.....
#15
鼎鼎的代码并不全。他只是影响了子节点,但父节点并没有。
bool blJmp = false;//标志
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(this.blJmp)return;
foreach(TreeNode tn in e.Node.Nodes)//影响子节点
{
tn.Checked = e.Node.Checked;
}
this.blJmp = true;
this.SetCheck(e.Node);//处理父节点
this.blJmp = false;
}
private void SetCheck(TreeNode n)
{
if(n.Checked)//如果当前节点选中,则父节点也要选取中
{
this.parentNode(n,n.Checked);
}
else//如果当前节点没有选中,且同级节点中都没有选中,则父节点也不要选中
{
if(n.Parent != null)
{
//如果同一级中没有被选中,则其父级也同时设为不选中,在这种情况下,递归父节点
if(this.nextNotCheck(n.Parent.FirstNode))
{
n.Parent.Checked = false;
this.SetCheck(n.Parent);
}
}
}
}
private void parentNode(TreeNode n,bool check)
{
if(n.Parent != null)
{
n.Parent.Checked = check;
this.parentNode(n.Parent,check);
}
}
//下一个节点是不是没有选中
private bool nextNotCheck(TreeNode n)
{
if(n.Checked) return false;
if(n.NextNode == null) return true;
return this.nextNotCheck(n.NextNode);
}
bool blJmp = false;//标志
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(this.blJmp)return;
foreach(TreeNode tn in e.Node.Nodes)//影响子节点
{
tn.Checked = e.Node.Checked;
}
this.blJmp = true;
this.SetCheck(e.Node);//处理父节点
this.blJmp = false;
}
private void SetCheck(TreeNode n)
{
if(n.Checked)//如果当前节点选中,则父节点也要选取中
{
this.parentNode(n,n.Checked);
}
else//如果当前节点没有选中,且同级节点中都没有选中,则父节点也不要选中
{
if(n.Parent != null)
{
//如果同一级中没有被选中,则其父级也同时设为不选中,在这种情况下,递归父节点
if(this.nextNotCheck(n.Parent.FirstNode))
{
n.Parent.Checked = false;
this.SetCheck(n.Parent);
}
}
}
}
private void parentNode(TreeNode n,bool check)
{
if(n.Parent != null)
{
n.Parent.Checked = check;
this.parentNode(n.Parent,check);
}
}
//下一个节点是不是没有选中
private bool nextNotCheck(TreeNode n)
{
if(n.Checked) return false;
if(n.NextNode == null) return true;
return this.nextNotCheck(n.NextNode);
}
#16
楼主给我回消息有什么问题,是取多选的值吗??
#17
是多选的取值,你的号多少啊.
#18
n.Parent.Checked中,n.Parent没有Checked属性.