C# Checkbox-Dialog 如何取消选中
C# Checkbox-Dialog How to uncheck
我在 C# 中有一个 Windows 表单对话框,它显示字典中每个元素的复选框。对话框 returns 一个包含所有 selected 元素(复选框)的列表。但是我注意到,如果我 select 一个复选框然后再次取消选中它,该元素仍然在返回的选定元素列表中。
我怎样才能解决这个问题?
我的对话框如下所示:
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
}
根据评论:
如果未选中引发的事件,您需要从列表中删除项目,我认为您必须检查已添加的项目以避免重复,如果存在则删除项目。所以处理程序将是这样的:
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);
}
};
我在 C# 中有一个 Windows 表单对话框,它显示字典中每个元素的复选框。对话框 returns 一个包含所有 selected 元素(复选框)的列表。但是我注意到,如果我 select 一个复选框然后再次取消选中它,该元素仍然在返回的选定元素列表中。 我怎样才能解决这个问题? 我的对话框如下所示:
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
}
根据评论:
如果未选中引发的事件,您需要从列表中删除项目,我认为您必须检查已添加的项目以避免重复,如果存在则删除项目。所以处理程序将是这样的:
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);
}
};