TREEVIEW NODES NIVEL ANTERIOR CHECK/UNCHEK
pessoas estou com um problema para marcar o nÃvel anterior de uma treeview quando pelo menos um nÃvel child estiver marcado e desmarcar quando nenhum child estiver marcado. ve o exemplo abaixo
o que eu quero é se eu marcar ou desmarcar um dos filhos verificar se pelo menos um desses filhos está marcado. se tiver marca o pai dele e se nenhum estiver marcado desmarca o pai dele.
tentei usar o evento aftercheck da treeview mas ele dá erro. eu uso esse evento para marcar e desmarcar os filhos quando o pai é marcado ou desmarcado mas o contrário não funciona. o que eu fiz então foi usar o botão que dispara o evento aonde vou precisar dessa verificação para verificar isso antes de disparar o evento dele mas eu queria uma forma de fazer isso ao marcar e desmarcar um filho. estou usando a sub abaixo para isso
muito agradeço a ajuda.
avô 0
pai 0
filho 0
filho 1
filho 2
pai 1
filho 0
filho 1
filho 2
filho 3
filho 4
pai 2
filho 0
filho 1
filho 2
filho 3
o que eu quero é se eu marcar ou desmarcar um dos filhos verificar se pelo menos um desses filhos está marcado. se tiver marca o pai dele e se nenhum estiver marcado desmarca o pai dele.
tentei usar o evento aftercheck da treeview mas ele dá erro. eu uso esse evento para marcar e desmarcar os filhos quando o pai é marcado ou desmarcado mas o contrário não funciona. o que eu fiz então foi usar o botão que dispara o evento aonde vou precisar dessa verificação para verificar isso antes de disparar o evento dele mas eu queria uma forma de fazer isso ao marcar e desmarcar um filho. estou usando a sub abaixo para isso
Dim n_nodes As Boolean = False
For n_nivel_um As Integer = 0 To Me.TreeView1.Nodes(0).Nodes.Count - 1
For n_nivel_dois As Integer = 0 To Me.TreeView1.Nodes(0).Nodes(n_nivel_um).Nodes.Count - 1
If Me.TreeView1.Nodes(0).Nodes(n_nivel_um).Nodes(n_nivel_dois).Checked = True Then
n_nodes = True
End If
Next
If n_nodes = True Then
Me.TreeView1.Nodes(0).Nodes(n_nivel_um).Checked = True
Else
Me.TreeView1.Nodes(0).Nodes(n_nivel_um).Checked = False
End If
n_nodes = False
Next
muito agradeço a ajuda.
Tá ai a logica em C#......
#region TreeView
private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
this.CheckAllChildNodes(node, nodeChecked);
}
}
}
private void CheckAllParentNodes(TreeNode treeNode, bool nodeChecked)
{
if (treeNode.Parent != null)
{
bool moreCheckd = false;
foreach (TreeNode node in treeNode.Parent.Nodes)
{
if (treeNode != node)
{
if (node.Checked)
{
moreCheckd = true;
}
}
}
if (!moreCheckd)
{
treeNode.Parent.Checked = nodeChecked;
CheckAllParentNodes(treeNode.Parent, nodeChecked);
}
}
}
private void twAcesso_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
if (e.Node.Nodes.Count > 0)
{
this.CheckAllChildNodes(e.Node, e.Node.Checked);
}
this.CheckAllParentNodes(e.Node, e.Node.Checked);
}
}
private void getChildNodes(ToolStripDropDownItem mi, TreeNode tn)
{
foreach (object item in mi.DropDownItems)
{
if (item.GetType() == typeof(ToolStripSeparator))
{
continue;
}
TreeNode node = new TreeNode(((ToolStripDropDownItem)item).Text);
node.Tag = ((ToolStripDropDownItem)item).Name;
node.Name = ((ToolStripDropDownItem)item).Name;
tn.Nodes.Add(node);
getChildNodes(((ToolStripDropDownItem)item), node);
}
}
#endregion
#region TreeView
private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
this.CheckAllChildNodes(node, nodeChecked);
}
}
}
private void CheckAllParentNodes(TreeNode treeNode, bool nodeChecked)
{
if (treeNode.Parent != null)
{
bool moreCheckd = false;
foreach (TreeNode node in treeNode.Parent.Nodes)
{
if (treeNode != node)
{
if (node.Checked)
{
moreCheckd = true;
}
}
}
if (!moreCheckd)
{
treeNode.Parent.Checked = nodeChecked;
CheckAllParentNodes(treeNode.Parent, nodeChecked);
}
}
}
private void twAcesso_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
if (e.Node.Nodes.Count > 0)
{
this.CheckAllChildNodes(e.Node, e.Node.Checked);
}
this.CheckAllParentNodes(e.Node, e.Node.Checked);
}
}
private void getChildNodes(ToolStripDropDownItem mi, TreeNode tn)
{
foreach (object item in mi.DropDownItems)
{
if (item.GetType() == typeof(ToolStripSeparator))
{
continue;
}
TreeNode node = new TreeNode(((ToolStripDropDownItem)item).Text);
node.Tag = ((ToolStripDropDownItem)item).Name;
node.Name = ((ToolStripDropDownItem)item).Name;
tn.Nodes.Add(node);
getChildNodes(((ToolStripDropDownItem)item), node);
}
}
#endregion
Tópico encerrado , respostas não são mais permitidas