请教关于C#2.0的TreeView控件的CheckBoxes属性问题 请问:有什么方法能让父级选中时,所有该父级的子级全部被选中,只要选中一个子级时,该子级的所有父级全部被选中,就像杀毒软件选择杀毒目标那样 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public partial class Form1 : Form { public Form1() { InitializeComponent(); treeView1.CheckBoxes = true; } private void Form1_Load(object sender, EventArgs e) { TreeNode root = treeView1.Nodes.Add("父"); root.Nodes.Add("子"); root.Nodes.Add("子"); root.Nodes.Add("子"); treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick); } void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { foreach (TreeNode node in e.Node.Nodes) { node.Checked = e.Node.Checked; } } } #region TreeView树中Checked属性改变时,处理数据和以下级别节点的选择属性 private void treeViewEx1_AfterCheck(object sender, TreeViewEventArgs e) { roleAfterCheck(e); } //处理角色新增和修改数据 private void roleAfterCheck(TreeViewEventArgs e) { object[] key = new object[4]; int nodeType = 1; DataRow foundRow; nodeType = ((RoleTreeNode)e.Node).NodeType; if (nodeType == 3) { key[0] = this.accountCode; key[1] = this.roleCode; key[2] = ((RoleTreeNode)e.Node).ModuleCode.ToString().Trim(); key[3] = ((RoleTreeNode)e.Node).OprCode.ToString().Trim(); } if (e.Node.Checked == true) { if (nodeType == 3 && this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Find(key) == null) { foundRow = this.dataSetRoleDataHelper2.AdmRoleRight.NewRow(); foundRow["AccountCode"] = key[0]; foundRow["RoleCode"] = key[1]; foundRow["ModuleCode"] = key[2]; foundRow["OprCode"] = key[3]; this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Add(foundRow); } if (e.Node.Parent != null) e.Node.Parent.Checked = true; bool isNodesChecked = false; foreach (TreeNode n in e.Node.Nodes) { if (n.Checked == true) { isNodesChecked = true; break; } } if (!isNodesChecked) treeNodeCheck(e.Node, e.Node.Checked); } else { if (nodeType == 3) { foundRow = this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Find(key); if (foundRow != null) foundRow.Delete(); } treeNodeCheck(e.Node, e.Node.Checked); } } private void treeNodeCheck(TreeNode node, bool check) { foreach (TreeNode n in node.Nodes) { if (n.Checked != check) n.Checked = check; treeNodeCheck(n, check); } } #endregion HttpWebRequest提交对方网站,有的页面成功,有的不成功。几天了,一直没搞定,请高手帮忙解决,非常感谢! DataGridView里加ComboBox问题 字符串相加先的性能好,还是相加后的性能好? 线程 一个关于权限控制的问题 C#中FTP功能居然连改变目录的CD命令都不支持,无限失望中! C++转到C#的问题 ◆◆◆◆◆通用问题,为什么用Excel控件导出的Excel工作薄不能用汇总功能?◆◆◆◆◆ 解决方案的问题 vs2015的源码管理必须用GIT? 如何单独控制FLASH控件的音量 webbrowser问题
{
public Form1()
{
InitializeComponent();
treeView1.CheckBoxes = true;
} private void Form1_Load(object sender, EventArgs e)
{
TreeNode root = treeView1.Nodes.Add("父");
root.Nodes.Add("子");
root.Nodes.Add("子");
root.Nodes.Add("子"); treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
} void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
foreach (TreeNode node in e.Node.Nodes)
{
node.Checked = e.Node.Checked;
}
}
}
private void treeViewEx1_AfterCheck(object sender, TreeViewEventArgs e)
{
roleAfterCheck(e);
} //处理角色新增和修改数据
private void roleAfterCheck(TreeViewEventArgs e)
{
object[] key = new object[4];
int nodeType = 1;
DataRow foundRow; nodeType = ((RoleTreeNode)e.Node).NodeType;
if (nodeType == 3)
{
key[0] = this.accountCode;
key[1] = this.roleCode;
key[2] = ((RoleTreeNode)e.Node).ModuleCode.ToString().Trim();
key[3] = ((RoleTreeNode)e.Node).OprCode.ToString().Trim();
} if (e.Node.Checked == true)
{
if (nodeType == 3 && this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Find(key) == null)
{
foundRow = this.dataSetRoleDataHelper2.AdmRoleRight.NewRow();
foundRow["AccountCode"] = key[0];
foundRow["RoleCode"] = key[1];
foundRow["ModuleCode"] = key[2];
foundRow["OprCode"] = key[3];
this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Add(foundRow);
}
if (e.Node.Parent != null)
e.Node.Parent.Checked = true; bool isNodesChecked = false;
foreach (TreeNode n in e.Node.Nodes)
{
if (n.Checked == true)
{
isNodesChecked = true;
break;
}
}
if (!isNodesChecked)
treeNodeCheck(e.Node, e.Node.Checked);
}
else
{
if (nodeType == 3)
{
foundRow = this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Find(key);
if (foundRow != null)
foundRow.Delete();
}
treeNodeCheck(e.Node, e.Node.Checked);
}
} private void treeNodeCheck(TreeNode node, bool check)
{
foreach (TreeNode n in node.Nodes)
{
if (n.Checked != check)
n.Checked = check;
treeNodeCheck(n, check);
}
}
#endregion