2014-09-25 2 views
0

VS C# Winform treeview: Я начинаю и ценю помощь.Как выполнить действие над предыдущим выбранным узлом в treeview (снять флажки)

Я хочу снять флажки с выбранного ранее узла. Приложение позволяет пользователю выбирать узел с дочерними элементами. Затем они могут проверять дочерние узлы. Если они затем выбирают другой родительский узел, предыдущие флажки необходимо очистить.

Parent1 имеет дочерние узлы A, B, & С Parent2 имеют дочерние узлы X, Y, & Z Если родительский 1 выбран и А, В, & С проверяются, а затем пользователь выбирает Parent2, флажки A, B, & C родителя 1 необходимо очистить.

Я попытался поймать SelectedNode в событии beforeSelect с TreeNode tnBeforeSelect = tvFileMan.SelectedNode; но когда я пытаюсь использовать его в событии после выбора, он не существует в этом контексте. У меня есть класс глобальных переменных, но я не могу понять, как добавить переменную treenode. Я думал, что смогу затем снять флажок в событии afterCheck с чем-то вроде.

foreach (TreeNode tn in tnBeforeSelect) 
{        
     tnBeforeSelect.Nodes.Checked = false; 
} 
+0

Не можете ли вы очистить узлы флажками, кроме того, что выбрано в цикле 'foreach'? –

+0

Алекс, вот что я пытаюсь сделать. Вопрос в том, как выглядит этот код? В частности, как мне ссылаться на узел и дочерние элементы, которые я хочу снять, поскольку они больше не выбраны? –

ответ

0

Решено. Расположение, местоположение, местоположение. Трюк состоял в том, чтобы поместить цикл foreach в обработчик события BeforeCheck, так как SelectedNode еще не изменился.

  if (e.Node.Nodes.Count >= 1) 
      { 
       if (tvFileMan.SelectedNode != null) 
       { 
        tvFileMan.SelectedNode.Checked = false; 
        foreach (TreeNode tn in tvFileMan.SelectedNode.Nodes) 
        { 
         if (tn.Nodes.Count.Equals(0)) 
          tn.Checked = false; 
        } 
       } 
      }