使特定的复选框在ListView中可见

时间:2013-11-07 13:42:21

标签: c# winforms

示例:

列出待处理的任务列表,每个任务都是带有复选框的listView中的一行。

任务完成时是否可能&选中以使复选框不可见 具体任务并保留记录当然?

谢谢。

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以为每个ListViewItem property ID提供一个ID,也可以在复选框中。如果Checkbox属于ListViewItem,并且任务已完成,并且复选框已选中,则可以隐藏此复选框。如果我理解你的话,这就是你需要的代码:

public class ListViewItemID : ListViewItem
{
    public int ID { get; set; }
}
public class CheckBoxID : CheckBox
{
    public int ID { get; set; }
}
public class program
{
    void Main()
    {
        var itemOne = new ListViewItemID { ID = 1 };
        var itemTwo = new ListViewItemID { ID = 2 };
        var checkBoxOne = new CheckBoxID { ID = itemOne.ID };
        checkBoxOne.CheckedChanged += HideCheckBox;
        var checkBoxTwo = new CheckBoxID { ID = itemTwo.ID };
        checkBoxTwo.CheckedChanged += HideCheckBox;
    }
    void HideCheckBox(object item, EventArgs e)
    {
        if (item.GetType() == typeof(CheckBoxID))
        {
            var checkBoxID = (CheckBoxID)item;

            foreach (ListViewItemID lItem in listViewItems.Where(lItem => lItem.ID == checkBoxID.ID && lItem.Text == "done" && checkBoxID.Checked))
            {
                checkBoxID.Visible = false;
            }
        }
        else if (item.GetType() == typeof(ListViewItemID))
        {
            var lItem = (ListViewItemID)item;
            foreach (var checkBox in Controls.Where(ctrl => ctrl.GetType() == typeof(CheckBoxID)).Select(ctrl => (CheckBoxID)ctrl).Where(checkBox => checkBox.ID == lItem.ID && checkBox.Checked && lItem.Text == "done"))
            {
                checkBox.Visible = false;
            }
        }
    }