日期:2014-05-18  浏览次数:20931 次

C#中要删除treeview中的结点,同时把对应的listview的内容删掉时,请问我的代码哪里错了
private void 删除ToolStripMenuItem_Click(object sender, EventArgs e)
  {

  if (this.treeView1.SelectedNode == null)
  MessageBox.Show("请输入你要删除的节点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  else
  {
  if (this.treeView1.SelectedNode.Nodes.Count == 0)
  { this.treeView1.SelectedNode.Remove();
  if (this.treeView1.SelectedNode.Text.ToString() == listView1.Items["姓名"].ToString())
  {
  listView1.Items.Remove(this.listView1.Items["姓名"]);
  }
  }
  else
  MessageBox.Show("请先删除的子节点", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
  this.treeView1.SelectedNode = null;

  }
  }

------解决方案--------------------
就这几句,你单步看逻辑不就知道了.
这句 listView1.Items.Remove(this.listView1.Items["姓名"]); 估计没达到你要的效果.

------解决方案--------------------
this.treeView1.SelectedNode.Remove();你先把它删掉了,然后后面又访问SelectedNode,那能不错吗,已经被删了,SelectedNode已经不是之前那个了,你应该把删除SelectedNode放到最后
------解决方案--------------------
this.treeView1.SelectedNode.Remove();//这个移早了
if(this.treeView1.SelectedNode.Text...)//这里获取不到,SelectedNode被上一步移除
------解决方案--------------------
this.treeView1.SelectedNode.Nodes.Count == 0这句话不是判断的是有没有子节点的吗,如果没有将他移除,如果有的话,限制一下
,所以你的逻辑顺序写反了啊。