取消选中复选框时删除值
Remove Value when Checkbox is unchecked
我正在尝试在取消选中复选框时删除值。
我的代码:
var words = new List<string>();
if (ckbAnswer1.Checked)
words.Add(" -A,");
if (ckbAnswer2.Checked)
words.Add("B,");
if (ckbAnswer3.Checked)
words.Add("C");
treeView1.SelectedNode.Text += treeView1.SelectedNode.Text +string.Join(" ", words);
Return Question 1 - A,B,C
,但是,假设我想取消选中 "A",应该将其从 Question 1 - A,B,C
中删除。我该怎么做?
我会建议使用一些键而不是仅仅基于文本的问题。
List<KeyValuePair<Guid, string>> words = new List<KeyValuePair<Guid, string>>();
ckbAnswer1.Tag = Guid.NewGuid().ToString();
if (ckbAnswer1.Checked)
questions.Add(new KeyValuePair<Guid, string>(ckbAnswer1.Tag, "A"));
else//Unchecked
words.Remove(words.Where(kv => kv.Key == ckbAnswer1.Tag));
treeView1.SelectedNode.Text += treeView1.SelectedNode.Text + string.Join(", ", words.Select(kvp => kvp.Value));
你应该订阅 CheckedChanged
事件和内部方法检查:
private void CheckBoxA_CheckedChanged(Object sender, EventArgs e)
{
if (checkboxA.Checked)
{
words.Add("word");
}
else
{
words.Remove("word");
}
treeView1.SelectedNode.Text = "Question 1 - ";
treeView1.SelectedNode.Text += string.Join(" ", words);
}
如果您将此 CheckChanged
事件分配给每个 Checkbox
:
private void ckbAnswer_CheckedChanged(object sender, EventArgs e)
{
UpdateNode();
}
然后添加方法:
private void UpdateNode()
{
var words = new List<string>();
if (ckbAnswer1.Checked)
{
words.Add("A");
}
if (ckbAnswer2.Checked)
{
words.Add("B");
}
if (ckbAnswer3.Checked)
{
words.Add("C");
}
var answers = " - none";
if (words.Count > 0) {
answers = " - " + string.Join(", ", words);
}
treeView1.SelectedNode.Text = treeView1.SelectedNode.Tag.ToString() + answers;
}
应将此行添加到您最初填充 TreeView 的位置:
treeView1.SelectedNode.Tag = treeView1.SelectedNode.Text;
这应该可以满足您的需求。
'tricky' 部分确保您保留原件的副本 Node.Text。
我正在尝试在取消选中复选框时删除值。 我的代码:
var words = new List<string>();
if (ckbAnswer1.Checked)
words.Add(" -A,");
if (ckbAnswer2.Checked)
words.Add("B,");
if (ckbAnswer3.Checked)
words.Add("C");
treeView1.SelectedNode.Text += treeView1.SelectedNode.Text +string.Join(" ", words);
Return Question 1 - A,B,C
,但是,假设我想取消选中 "A",应该将其从 Question 1 - A,B,C
中删除。我该怎么做?
我会建议使用一些键而不是仅仅基于文本的问题。
List<KeyValuePair<Guid, string>> words = new List<KeyValuePair<Guid, string>>();
ckbAnswer1.Tag = Guid.NewGuid().ToString();
if (ckbAnswer1.Checked)
questions.Add(new KeyValuePair<Guid, string>(ckbAnswer1.Tag, "A"));
else//Unchecked
words.Remove(words.Where(kv => kv.Key == ckbAnswer1.Tag));
treeView1.SelectedNode.Text += treeView1.SelectedNode.Text + string.Join(", ", words.Select(kvp => kvp.Value));
你应该订阅 CheckedChanged
事件和内部方法检查:
private void CheckBoxA_CheckedChanged(Object sender, EventArgs e)
{
if (checkboxA.Checked)
{
words.Add("word");
}
else
{
words.Remove("word");
}
treeView1.SelectedNode.Text = "Question 1 - ";
treeView1.SelectedNode.Text += string.Join(" ", words);
}
如果您将此 CheckChanged
事件分配给每个 Checkbox
:
private void ckbAnswer_CheckedChanged(object sender, EventArgs e)
{
UpdateNode();
}
然后添加方法:
private void UpdateNode()
{
var words = new List<string>();
if (ckbAnswer1.Checked)
{
words.Add("A");
}
if (ckbAnswer2.Checked)
{
words.Add("B");
}
if (ckbAnswer3.Checked)
{
words.Add("C");
}
var answers = " - none";
if (words.Count > 0) {
answers = " - " + string.Join(", ", words);
}
treeView1.SelectedNode.Text = treeView1.SelectedNode.Tag.ToString() + answers;
}
应将此行添加到您最初填充 TreeView 的位置:
treeView1.SelectedNode.Tag = treeView1.SelectedNode.Text;
这应该可以满足您的需求。
'tricky' 部分确保您保留原件的副本 Node.Text。