递归取消选中ListViewItems

时间:2014-06-09 21:26:44

标签: c# listview user-interface recursion checkbox

我有一个带有级联复选框的ListView。如果未选中父框,我想要取消选中所有子框(同样,如果选中父框,我也要检查所有子框)。目前,如果我选中或取消选中某个框,则父节点和子节点将显示为灰色,但复选标记仍显示在子框上。

我认为我必须递归地执行此操作。我尝试了下面的代码,我认为它应该可以工作,但是由于投射问题,它会在运行时中断。

private void listViewChildNodeModifier(ListViewItem item)
  {
     if (item.SubItems.Equals(null)) return;
     else
     {
        foreach (ListViewItem childItem in item.SubItems)
        {
           listViewChildNodeModifier(childItem);
           if(childItem.Tag is TestingNode)
              ((TestingNode)childItem.Tag).Enabled = item.Checked;
        }
     }
  }

1 个答案:

答案 0 :(得分:1)

你能不能这样做

foreach (ListViewItem item in this.ListView.Items)
{            
    for (int i = 0; i < item.SubItems.Count; i++)
    {
        item.SubItems[i].Checked = false; 
        //will something like this work for you let me know
    }
}

另一个应该起作用的替代方案是以下

foreach (ListViewItem.ListViewSubItem childItem in item.SubItems)
 {
   if(item.Checked)
   {
     item.Checked = false;
   }
 }