2016-03-24 3 views
0

im пытается удалить значение, если флажок снят. Мой код:Удалить значение, если флажок снят.

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

Возвращение Question 1 - A,B,C, но, скажем, я хочу, чтобы снять "A", который должен удалить его из Question 1 - A,B,C. Как мне это сделать?

ответ

1

НУ должны подписаться на 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);   
} 
+0

Я попробовал ' if (ckbAnswer1.Checked) { words.Add (" A "); } else { слов.Удалить ("A"); } treeView1.SelectedNode.Text + = string.Join ("", words); '- это не сработало/ – AndroidAL

+0

Вы хотите удалить это слово из treeView.Text? –

+0

Да, поэтому treeView.Text был изначально Вопросом 1- A, B, C теперь будет вопрос 1 - B, C. – AndroidAL

0

Я бы порекомендовал использовать какой-то ключ, а не только текстовые вопросы.

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

Если присвоить этот 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; 

Это должно делать то, что вы после этого.

«Незначительная» часть гарантирует, что вы сохраните копию исходного Node.Text.

+0

Спасибо за помощь, я попробовал. Он возвращает «Вопрос 1 Вопрос 1A» – AndroidAL

+0

@AndroidAL Привет. Я вижу проблему. Вам нужно переместить элемент treeView1.SelectedNode.Tag = treeView1.SelectedNode.Text; 'в место вашего кода, в котором вы первоначально заполняете узлы дерева. Я также сделал небольшое редактирование на последней строке кода - я сделал опечатку. – Ulric

Смежные вопросы