2013-04-30 3 views
2

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

private bool updatingTreeView; 
private void CheckChildren_ParentSelected(TreeNode node, Boolean isChecked) 
{ 
    foreach (TreeNode item in node.Nodes) 
    { 
     item.Checked = isChecked; 

     if (item.Nodes.Count > 0) 
     { 
      this.CheckChildren_ParentSelected(item, isChecked); 
     } 
    } 
} 
private void SelectParents(TreeNode node, Boolean isChecked) 
{ 
    //MessageBox.Show(node.Parent.ToString()); 
    if (node.Parent != null) 
    { 
     node.Parent.Checked = isChecked; 
     SelectParents(node.Parent, isChecked); 
    } 
} 
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) 
{ 
    if (updatingTreeView) return; 
    updatingTreeView = true; 
    CheckChildren_ParentSelected(e.Node, e.Node.Checked); 
    SelectParents(e.Node, e.Node.Checked); 
    updatingTreeView = false; 
} 

Но теперь

здесь проблема:

, когда я снял флажок дочернего узла, я хочу, чтобы весь снимок был отмечен только в treeview.

нравится эта картина:

nchecked all childnode

Но с моим кодом все родителем и ребенком (как) снят !!!

так что теперь я хочу знать, как я могу непроверенным только все дочерний узел в TreeView,

теперь, как изменить этот код для исправления этой проблемы?

С уважением.

+0

В вашем примере, как бы вы когда-нибудь снять пометку узел 6? Кажется, что если вы только очищаете корневые узлы, вы никогда не сможете очистить корневой каталог – timmy

+0

@timmy: я не знаю, что я могу с моим кодом или сейчас, но я знаю, что это возможно: D так что у вас есть любая идея для меня? :( – Sam

+0

Для меня это выглядит так: SelectParents рекурсивно не проверяет все paretnts до node.Parent равно null. – Zilog

ответ

1

«Когда я снял флажок с дочернего узла, я хочу, чтобы весь снимок был выбран только в виде дерева».

Другими словами, вы не хотите, чтобы убрать родительские узлы?

В этом случае, только называют SelectParents() при выборе узла:

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) 
{ 
    if (updatingTreeView) return; 
    updatingTreeView = true; 
    CheckChildren_ParentSelected(e.Node, e.Node.Checked); 
    if (e.Node.Checked) 
    { 
     SelectParents(e.Node, e.Node.Checked); 
    } 
    updatingTreeView = false; 
}