treeview(winform)里实现父选子全选,某一子选所有父选
长话短说,上代码:
绑定treeview
,r%Meo/d#Q(K0private void GetMenuStripItemName(ToolStripItemCollection items, TreeNodeCollection treeNodeCollection)无忧脚本y]#H%bx/]w
{无忧脚本z/\CJ,\$A7]
foreach (ToolStripItem item in items)无忧脚本5OLQ6S/f:} XP
{
7}g4Q~ s3}.q@6R0 if (item is System.Windows.Forms.ToolStripMenuItem)无忧脚本"[w4lk mR~
{
0LW9E0pst0 TreeNode tempTreeNode = new TreeNode(item.Text);无忧脚本IQ[6MoN*L |9W"{+uo
tempTreeNode.Checked = IsHaveRight(item.Text);
1[s
\m)GI#w0 treeNodeCollection.Add(tempTreeNode);
%@X3GE]qcR(Xf,d0 this.GetMenuStripItemName(((ToolStripMenuItem)item).DropDownItems, tempTreeNode.Nodes);无忧脚本q(`6W7gV+A&K~'L[
}无忧脚本,_]AFu
}无忧脚本P'qW,x Y`4KD
}
:`_ VS4~#OV0 //得到用户权限
+?-FP$q
dy+T T*x&[8l/x0 private bool IsHaveRight(string MenuText)无忧脚本i/~MRK$o
{
\_F1R&z+W,J0 //foreach (User.UserRightRow row in user.UserRight)无忧脚本F l:^-Xq W$uSJ
//{无忧脚本/Czwz2U7EDE
// if (row.UserRightMenu == MenuText)
8A.Vww&Z0 // {无忧脚本:a~/O"zn `
// if (row.UserHaveRight == true)
!s
D"xC+Amw$E0 // {
Br#l8pcg$pK;[0 // return true;无忧脚本/Vuu%|#c+T
// }
5f pN^
Y,yUkek0 // else
,L
d
NP5R.m"T0 // {
3_ `+]5xH0 // return false;
c.kJ `
wMn0 // }
@
]3l_2NI0 // }
@ B Mm
m/}O0 //}无忧脚本Qj9Yt_7QcQ\
return false;
.\P;H
^I
QK0 }
得到主form的菜单,注意,要设置主form的MainMenuStrip无忧脚本RR(c,_4cpbA%z(O
private void PopedomForm_Load(object sender, EventArgs e)
M
XYK!d)G!b^/S0 {无忧脚本 YcCegk
MenuStrip menu = this.ParentForm.MainMenuStrip;无忧脚本.D!s-^h9J3AU
GetMenuStripItemName(menu.Items, treeView1.Nodes);无忧脚本EMo-H&oP!~
}
在选中事件中
无忧脚本yr\6EM hVH
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)无忧脚本VW/B4j L2yh
{无忧脚本eyR6^ F;_,p?"a
if (e.Action != TreeViewAction.Unknown)无忧脚本A_M3\"P,~Sj#M
{无忧脚本/^'C%A8UKe`:lu
CheckAllChildNodes(e.Node, e.Node.Checked);
//选中父节点
4m.k6bI7S8J0 bool bol = true;无忧脚本 J+J[m&P
if (e.Node.Parent != null)无忧脚本7r [| S0?(|
{无忧脚本O$l"~:UIP%as
//for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)无忧脚本
A'C:@S J zM
//{
(l0QfB;?0?{|4FXW0 // if (!e.Node.Parent.Nodes[i].Checked)无忧脚本.AN{&A8y!G.O{
// bol = false;
MM Sb2\n0 //}
无忧脚本$fguZ$KQ r9x:H
///修改当某一子节点选中时,所有父节点选中。当子节点全取消选中时,所有父节点选中无忧脚本/D+?4I$BD"t v(a
bol = e.Node.Checked;无忧脚本 z3X
oC[Pal|
if (bol == true)
$\n5R
YlmX0 { }无忧脚本P:^K;B5A8q"Qhj3l
else
DBv2nP,Me4n0 {无忧脚本J9m?2_ ncw
for (int i = 0; i < e.Node.Parent.Nodes.Count; i++)无忧脚本V.@(Cr7b\E
{无忧脚本z
l q:J6jVc3E/kT
if (e.Node.Parent.Nodes[i].Checked)无忧脚本[j8u2@H%b2FP9{
{
