Search code examples
c#winformscheckboxdialogunchecked

C# Checkbox-Dialog How to uncheck


I have a Windows Forms Dialog in C# which shows Checkboxes for each Element in a Dictionary. The Dialog returns a List with all selected Elements(Checkboxes). However I noticed that if I select a Checkbox and then uncheck it again, the Element is still in the returned List of Selected Elements. How can I fix this? My Dialog looks like this:

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
}

Solution

  • As per the comment:

    You need to remove the items from the list if the raised event is unchecked, I think you have to check for already added items to avoid duplicates, and remove the items if exists. so the handler would be like this:

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