一个treeview的问题

pennygiser 2011-04-28 09:22:28
在treeview实现一个上下线排序的功能,我的思路是先删除掉节点,然后再在在父节点下添加。
foreach (TreeNode tn in TreeViewHelper.GetAllNodes(this.treeView1))
{

if (...)
{
for (int i = 0; i < DownNum; i++)
{
if (tn.Text == sl[i]) // 把所有下线的对象保存在sl集合里面,判断它是否下线
{

treeView1.Nodes.Remove(tn); //删除此节点
tn.Parent.Nodes.Add(tn); //把删掉的再在节点末添加进来,达到下线置底的作用

}
}
}

}

问题出现在tn.Parent 为null 。求解。。或者有什么方法实现这个功能
...全文
67 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pennygiser 2011-04-28
  • 打赏
  • 举报
回复
谢谢PISANAN,同时也感谢楼上几位热心肠的朋友帮助。。解决了。
PISANAN 2011-04-28
  • 打赏
  • 举报
回复
TreeViewHelper.GetAllNodes(this.treeView1)方法获取所有节点。。
问题是如果是根节点,当然父节点是空的。。

treeView1.Nodes.Remove(tn); //删除此节点
tn.Parent.Nodes.Add(tn); //把删掉的再在节点末添加进来,达到下线置底的作用

改成
if(tn.Parent!=null)
{
TreeNode pn=tn.Parent;
pn.Nodes.Remove(tn); //删除此节点 这里效率会快一点。
pn.Nodes.Add(tn); //把删掉的再在节点末添加进来,达到下线置底的作用
}
pennygiser 2011-04-28
  • 打赏
  • 举报
回复
额,我的意思是我先add ,再remove ,结果还是一样报错。很郁闷
pennygiser 2011-04-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]

先Remove了tn,然后再访问tn,这个有点问题吧
[/Quote]

假如我没有remove了tn,tn.panrent还是空的。 我试过了。
吾shi谁 2011-04-28
  • 打赏
  • 举报
回复
//删除满足一定条件的节点

string name = "待删除的节点"

for (int i = 0; i < treeView1.Nodes[1].Nodes.Count; i++)
if (treeView1.Nodes[1].Nodes[i].Text == name)
treeView1.Nodes[1].Nodes[i].Remove();



//添加节点

string name = "新添加的节点"

treeView1.Nodes[1].Nodes.Add(name);
bdmh 2011-04-28
  • 打赏
  • 举报
回复
先Remove了tn,然后再访问tn,这个有点问题吧

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧