如何在TreeView中把设置了Checked标志的所有TreeNode都拿出来,尽量不去遍历整棵树
如何在TreeView中把设置了Checked标志的所有TreeNode都拿出来,我不想去遍历整棵树去查找,谢谢! 问题点数:50、回复次数:7Top
1 楼soulroom(易水之风)回复于 2003-12-01 11:03:06 得分 0
好像不行Top
2 楼brightheroes(在地狱中仰望天堂)回复于 2003-12-01 11:16:28 得分 15
声明一个ArrayList
给你的树添加一个AfterSelect事件
判断节点是否选中
如果选中,放进ArrayList中
如果撤销选中,从ArrayList中remove掉
Top
3 楼brightheroes(在地狱中仰望天堂)回复于 2003-12-01 11:22:15 得分 0
不好意思
是AfterSelect事件
private void treeView1_AfterCheck(object sender, System.Windows.Forms.TreeViewEventArgs e)
{
if(e.Node.Checked)
{
if(!arrayList.Contains(e.Node))
{
arrayList.Add(e.Node);
}
}
else
{
if(arrayList.Contains(e.Node))
{
arrayList.Remove(e.Node);
}
}
}Top
4 楼imroc(呆鸟)回复于 2003-12-01 11:23:29 得分 20
不遍历好像不行,我是这样做的
/// <value>选中的接点</value>
private ArrayList _checkedlist = new ArrayList();
public ArrayList CheckedList
{
get
{
_checkedlist.Clear();
GetCheckedNode(this.Nodes);
return _checkedlist;
}
}
///<summary>获得选中的节点</summary>
/// <param name="tnc">起始节点.</param>
/// <returns>.</returns>
private void GetCheckedNode(TreeNodeCollection tnc)
{
foreach(TreeNode tmpNd in tnc )
{
if ( tmpNd.CheckBox && tmpNd.Checked)
{
_checkedlist .Add(tmpNd);
}
if(tmpNd.Nodes.Count!=0)
{
GetCheckedNode(tmpNd.Nodes);
}
}
}Top
5 楼imroc(呆鸟)回复于 2003-12-01 11:24:56 得分 0
我指的是web方式下Top
6 楼jhonsn(晓晨)回复于 2003-12-01 11:41:12 得分 15
如果树深度不深,节点也不是很多,我觉得还是遍历一下
比较方便,另外当check父节点的时候把它下面的所有子节点都check,
去掉时要做反过程,向列表中加东西还是要遍历一下子树,去掉父点时也要
遍历子树,不过使用arraylist的方法在树节点很多时可以提高速度,也是不错的
方法
Top
7 楼heroxn2002(老兵)回复于 2003-12-01 11:44:31 得分 0
谢谢各位了!:)Top




