TreeView从下往上遍历的递归调用问题 本帖最后由 yangjinan0729 于 2010-09-18 16:32:43 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 tryprivate void treeView1_AfterCheck(object sender, TreeViewEventArgs e){ //只捕获checkbox操作事件 if (e.Action != TreeViewAction.Unknown) { bool all_selected = true; foreach (TreeNode node in e.Node.Parent.Nodes) { if (!node.Checked) { all_selected = false; break; } } TreeNode p = e.Node.Parent; while (p!= null) { p.Checked = all_selected; p = p.Parent; } }} 哎 这样就可以了 今天下午脑子有问题了 //处理TreeView1的checkbox事件 private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) { //只捕获checkbox操作事件 if (e.Action != TreeViewAction.Unknown) { tree(e.Node); } } private void tree(TreeNode tn) { if (tn.Parent != null) { //节点未选中,则设置祖先节点为false if (tn.Checked == false) { tn.Parent.Checked = false; if (tn.Parent.Parent != null) { //tn.Parent.Parent.Checked = false; tree(tn.Parent); } } else if (tn.Checked) { if (tn.Nodes.Count > 0) { this.CheckAllChildNodes(tn, tn.Checked); } } //指示是否全部选中了节点的子节点,如果子节点全部选中之后则自动选中此父节点 bool ischecked = true; foreach (TreeNode ctn in tn.Parent.Nodes) { ischecked = ischecked & ctn.Checked; } if (ischecked) { tn.Parent.Checked = true; if (tn.Parent.Parent != null) { tree(tn.Parent); } //tree(e.Node.Parent); } } } private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked) { foreach (TreeNode node in treeNode.Nodes) { node.Checked = nodeChecked; if (node.Nodes.Count > 0) { // If the current node has child nodes, call the CheckAllChildsNodes method recursively. this.CheckAllChildNodes(node, nodeChecked); } } } 一个正则表达式 错误信息集 int --> bit 如何实现字幕滚动的效果,随机抽取滚动的效果. listview中为何delete与ctrl+a快捷键无效? Assembly类型无法加载自己的文件啊,为什么? c#会员编号规则 水晶报表超级难得问题,谁能解决就是高手中的高手!!! 想知道程序的外部调用 请教C#、面向对象和设计模式的学习经验 一个正三角形,边长是70 在这个正三角形的任一边为弦,画园弧(在内),园半径是75 请问在A区域放三个相同的园,都与园弧相切且两两相切, 这三个园要放多大呀?? 请问如何生成10位永不重复的随机数?
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
//只捕获checkbox操作事件
if (e.Action != TreeViewAction.Unknown)
{
bool all_selected = true;
foreach (TreeNode node in e.Node.Parent.Nodes)
{
if (!node.Checked)
{
all_selected = false;
break;
}
}
TreeNode p = e.Node.Parent;
while (p!= null)
{
p.Checked = all_selected;
p = p.Parent;
}
}
}
//处理TreeView1的checkbox事件
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
//只捕获checkbox操作事件
if (e.Action != TreeViewAction.Unknown)
{
tree(e.Node);
}
}
private void tree(TreeNode tn)
{
if (tn.Parent != null)
{
//节点未选中,则设置祖先节点为false
if (tn.Checked == false)
{
tn.Parent.Checked = false;
if (tn.Parent.Parent != null)
{
//tn.Parent.Parent.Checked = false;
tree(tn.Parent);
}
}
else if (tn.Checked)
{
if (tn.Nodes.Count > 0)
{
this.CheckAllChildNodes(tn, tn.Checked);
}
}
//指示是否全部选中了节点的子节点,如果子节点全部选中之后则自动选中此父节点
bool ischecked = true;
foreach (TreeNode ctn in tn.Parent.Nodes)
{
ischecked = ischecked & ctn.Checked;
}
if (ischecked)
{
tn.Parent.Checked = true;
if (tn.Parent.Parent != null)
{
tree(tn.Parent);
}
//tree(e.Node.Parent);
}
}
} private void CheckAllChildNodes(TreeNode treeNode, bool nodeChecked)
{
foreach (TreeNode node in treeNode.Nodes)
{
node.Checked = nodeChecked;
if (node.Nodes.Count > 0)
{
// If the current node has child nodes, call the CheckAllChildsNodes method recursively.
this.CheckAllChildNodes(node, nodeChecked);
}
}
}