Reputation: 1119
im trying to remove a value when a checkbox is unchecked. My Code:
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
, but, say i want to uncheck "A", which should remove it from Question 1 - A,B,C
. How do i do that?
Upvotes: 0
Views: 876
Reputation: 841
If you assign this CheckChanged
event to each Checkbox
:
private void ckbAnswer_CheckedChanged(object sender, EventArgs e)
{
UpdateNode();
}
And then add the method:
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;
}
This line should be added to where you initially populate the TreeView:
treeView1.SelectedNode.Tag = treeView1.SelectedNode.Text;
That should do what you are after.
The 'tricky' part is ensuring you keep a copy of the original Node.Text.
Upvotes: 0
Reputation: 12171
ou should subscribe on CheckedChanged
event and inside method check:
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);
}
Upvotes: 1
Reputation: 2587
I would recommend to use some key instead of just text based questions.
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));
Upvotes: 0