对选项Item Checked事件做如下处理,取消全选的时候也会触发下面的事件,所以需要加条件进行判断。
private void lstvBusiness_belong_ItemChecked(object sender, ItemCheckedEventArgs e)
{
//当被选择的是“全部”才触发以下事件
if (e.Item.Index == 0)
{
//如果当前被选择就全选所有选项
if (lstvBusiness_belong.Items[0].Checked)
for (int i = 1; i < lstvBusiness_belong.Items.Count; i++)
{
lstvBusiness_belong.Items[i].Checked = true;
}
//当tag值为Null时才是手动开关主开关的操作,自动变动情况不执行该段代码
else if (lstvBusiness_belong.Items[0].Tag == null)
for (int i = 1; i < lstvBusiness_belong.Items.Count; i++)
{
lstvBusiness_belong.Items[i].Checked = false;
}
}
//开关全部打开,且主开关关闭状态,结果:主开关打开
if (lstvBusiness_belong.CheckedItems.Count + 1 == lstvBusiness_belong.Items.Count && lstvBusiness_belong.Items[0].Checked == false)
{
lstvBusiness_belong.Items[0].Tag = null;
lstvBusiness_belong.Items[0].Checked = true;
}
//开关关闭,且主开关开着,结果:关闭开关主
if (e.Item.Index != 0 && e.Item.Checked == false && lstvBusiness_belong.Items[0].Checked == true)
{
//此时会因为主开关的状态变化然后对其他开关做一次变动,这里就要用到中间值去做判断,是否是手动对主开关进行的操作
//如果是手动做的操作才做处理
lstvBusiness_belong.Items[0].Tag = 1;
lstvBusiness_belong.Items[0].Checked = false;
}
}