递归取消ListViewItems检查

本文关键字:检查 ListViewItems 取消 递归 | 更新日期: 2023-09-27 18:07:42

我有一个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;
        }
     }
  }

递归取消ListViewItems检查

你能不能不要这样做

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;
   }
 }