C#Checkbox-Dialog如何取消选中

时间:2017-09-28 12:18:43

标签: c# winforms checkbox dialog unchecked

我在C#中有一个Windows窗体对话框,显示字典中每个元素的复选框。对话框返回包含所有选定元素(复选框)的列表。但是我注意到,如果我选择一个复选框然后再次取消选中它,则元素仍然在返回的所选元素列表中。 我怎样才能解决这个问题? 我的对话框看起来像这样:

public SelectDialog(Dictionary<string, string> Result)
    {
        int left = 45;
        int idx = 0;
        InitializeComponent();
        for (int i = 0; i < Result.Count; i++)
        {
            CheckBox rdb = new CheckBox();
            rdb.Text = Result.Values.ElementAt(i).Equals("") ? Result.Keys.ElementAt(i) : Result.Values.ElementAt(i);
            rdb.Size = new Size(100, 30);
            this.Controls.Add(rdb);
            rdb.Location = new Point(left, 70 + 35 * idx++);
            if (idx == 3)
            {
                idx = 0; //Reihe zurücksetzen
                left += rdb.Width + 5; // nächste Spalte
            }
            rdb.CheckedChanged += (s, ee) =>
            {
                var r = s as CheckBox;
                if (r.Checked)
                    this.selectedString.Add(r.Text);
            };
        }
    }
//Some more Code
}

1 个答案:

答案 0 :(得分:1)

根据评论:

如果未选中引发的事件,您需要从列表中删除项目,我认为您必须检查已添加的项目以避免重复,并删除项目(如果存在)。因此处理程序将是这样的:

 rdb.CheckedChanged += (s, ee) =>
        {
            var r = s as CheckBox;
            var itemIndex = this.selectedString.IndexOf(r.Text)
            if (r.Checked && itemIndex == -1) 
                this.selectedString.Add(r.Text);
            else if(!r.Checked && itemIndex != -1)
            {                  
                this.selectedString.RemoveAt(itemIndex);
            }
        };