在TreeView中的level有4级~
我需要在点击3级目录的CheckBoxes的同时修改他的父级目录(包括父级目录的父级目录...直到顶级目录)和子级目录(包括该目录的所有子级)
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Node.Checked == true && e.Node.Level == 1)
{
e.Node.Parent.Checked = true;
return;
}
if (e.Node.Checked == true && e.Node.Level == 2)
{
e.Node.Parent.Checked = true;
return;
}
if (e.Node.Checked == true && e.Node.Level == 3)
{
e.Node.Parent.Checked = true;
return;
}
if (e.Node.Checked == false)
{
if (e.Node.Nodes.Count > 0)
{
foreach (TreeNode node in e.Node.Nodes)
{
node.Checked = e.Node.Checked;
}
}
}
}以上代码只能作到点击子级目录的CheckBoxes时同时修改他的父级目录请问我该如何改????????
我需要在点击3级目录的CheckBoxes的同时修改他的父级目录(包括父级目录的父级目录...直到顶级目录)和子级目录(包括该目录的所有子级)
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Node.Checked == true && e.Node.Level == 1)
{
e.Node.Parent.Checked = true;
return;
}
if (e.Node.Checked == true && e.Node.Level == 2)
{
e.Node.Parent.Checked = true;
return;
}
if (e.Node.Checked == true && e.Node.Level == 3)
{
e.Node.Parent.Checked = true;
return;
}
if (e.Node.Checked == false)
{
if (e.Node.Nodes.Count > 0)
{
foreach (TreeNode node in e.Node.Nodes)
{
node.Checked = e.Node.Checked;
}
}
}
}以上代码只能作到点击子级目录的CheckBoxes时同时修改他的父级目录请问我该如何改????????
解决方案 »
- 谁能详细的说一下httpWebRequest与COOKIE?
- 在C#2005winform中,文本输入框的得到焦点事件是哪个?
- 设计模式中 MVC 程序员与DBA之分?
- 关于txt连接字符串问题!
- VS2005的问题
- 自已写的C#代码问什么在VC#速成版里不能调试
- treeview问题: web上如何才能正确显示数据库中数据呢?
- 推(Push)/拉(Pull)模式 难道真就不能在代码中体现出来吗?--看MVP文章小议
- 請教高手!C#中一個文件到了文件尾怎麼返回到文件頭?
- 急救:在串口编程中,怎么编写中文,英文的编码,解码啊??(c#)
- 如何顺序调用异步函数及回调函数
- C#第二次读TextBox.text内容为空,的问题@!
第一种傻办法。需要你确定有几级。比方说你说的三级。那么接下来
Node这个是你当前点击的节点
Node.Checked=true;
Node.Parent.Checked=true;
Node.Parent.Parent.Check=true;...
foreach(TreeNode n in Node.Nodes)
n.checked=true;第二种,用递归这样无论你有几级都可以实现
代码一会儿发上来
/// 当某个节点状态发生变化时,改变其子节点与父节点状态 /// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tview_AfterCheck(object sender, TreeViewEventArgs e)
{
TreeNode node = e.Node;
//只执行用户操作而产生的事件
if (e.Action != TreeViewAction.Unknown)
{
//当node有子节点的时候,设置子节点状态与node状态相同
if (node.Nodes != null)
{
SetAllChildNodesCheckedState(node);
} //当node有父节点时
while (node.Parent != null)
{
//如果node状态为真,则父节点状态为真
if (node.Checked)
{
node.Parent.Checked = true;
}
else
{
//看兄弟节点状态是否都为假,如果是设置父节点状态为假
bool bolAllFalse = true;
foreach (TreeNode cnode in node.Parent.Nodes)
{
if (cnode.Checked)
{
bolAllFalse = false;
break;
}
}
if (bolAllFalse)
{
node.Parent.Checked = false;
}
}
node = node.Parent;
} } } /// <summary>
/// 设置说有子几点为node状态
/// </summary>
/// <param name="node"></param>
private void SetAllChildNodesCheckedState(TreeNode node)
{
foreach (TreeNode cnode in node.Nodes)
{
cnode.Checked = node.Checked;
SetAllChildNodesCheckedState(cnode);
}
}
http://download.csdn.net/source/315730
{
InitTreeView();
} /// <summary>
/// 初始化树型,一共5层
/// </summary>
private void InitTreeView()
{
treeView1.Nodes.Clear();
for (int i = 1; i < 6; i++)
{
TreeNode n = new TreeNode("第 " + i.ToString());
treeView1.Nodes.Add(n);
AddNode(n, 0);
}
}
private void AddNode(TreeNode n,int l)
{
if(l>5)
return;
l++;
for (int j = 0; j < 5; j++)
{
TreeNode n1 = new TreeNode(j.ToString());
n.Nodes.Add(n1);
AddNode(n1, l);
}
} private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard)
{
CheckParent(e.Node);
CheckChild(e.Node);
}
} /// <summary>
/// 递归打勾父节点
/// </summary>
/// <param name="n"></param>
private void CheckParent(TreeNode n)
{
if (n.Parent != null)
{
n.Parent.Checked = n.Checked;
CheckParent(n.Parent);
}
}
/// <summary>
/// 递归打勾子节点
/// </summary>
/// <param name="n"></param>
private void CheckChild(TreeNode n)
{ if (n.Nodes.Count != 0)
{
foreach (TreeNode n1 in n.Nodes)
{
n1.Checked = n.Checked;
CheckChild(n1);
}
}
else
return;
}