ImageList中添加三个状态图标,注意顺序 窗体加载事件写 this.treeView1.ImageList = imageList1; 结点被选中的事件 private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Node.ImageIndex == 1) { e.Node.SelectedImageIndex = 0; e.Node.ImageIndex = 0; SetNodeImg11(e.Node); SetNodeImg12(e.Node); } else { e.Node.SelectedImageIndex = 1; e.Node.ImageIndex = 1; SetNodeImg21(e.Node); SetNodeImg22(e.Node); } } 其中四个方法的详细代码如下: //设置节点选定状态:规则.1:检查是否有子节点,需清除所有子节点的选定状态; private void SetNodeImg11(TreeNode tn) { foreach (TreeNode t in tn.Nodes) { t.SelectedImageIndex = 0; t.ImageIndex = 0; if (t.Nodes.Count != 0) { SetNodeImg11(t); } } } //设置节点选定状态:规则.2:检查是否有父节点,如有,则根据兄弟节点的选定状态修改父节点的选定状态 private void SetNodeImg12(TreeNode tn) { if (tn.Parent == null) return; int Img0Num = 0; int Img1Num = 0; int Img2Num = 0; //统计兄弟节点中选中情况 foreach (TreeNode t in tn.Parent.Nodes) { if (t.ImageIndex == 0) Img0Num++; if (t.ImageIndex == 1) Img1Num++; if (t.ImageIndex == 2) Img2Num++; } //如果兄弟节点中选中和未选中都有 if ((Img2Num != 0) || ((Img0Num != 0) && (Img1Num != 0))) { tn.Parent.SelectedImageIndex = 2; tn.Parent.ImageIndex = 2; } else { tn.Parent.StateImageIndex = 0; tn.Parent.ImageIndex = 0; } //递归 SetNodeImg12(tn.Parent); } //设置节点选定状态:规则.1:检查是否有子节点,设置所有子节点为选定状态 private void SetNodeImg21(TreeNode tn) { foreach (TreeNode t in tn.Nodes) { t.SelectedImageIndex = 1; t.ImageIndex = 1; if (t.Nodes.Count != 0) { SetNodeImg21(t); } } } //设置节点选定状态:规则.2:检查是否有父节点,如有,则根据兄弟节点的选定状态修改父节点的选定状态 private void SetNodeImg22(TreeNode tn) { if (tn.Parent == null) return; int Img0Num = 0; int Img1Num = 0; int Img2Num = 0; //统计兄弟节点中选中情况 foreach (TreeNode t in tn.Parent.Nodes) { if (t.ImageIndex == 0) Img0Num++; if (t.ImageIndex == 1) Img1Num++; if (t.ImageIndex == 2) Img2Num++; } //如果兄弟节点中选中和未选中都有 if ((Img2Num != 0) || ((Img0Num != 0) && (Img1Num != 0))) { tn.Parent.SelectedImageIndex = 2; tn.Parent.ImageIndex = 2; } else if ((Img1Num == 0) && (Img2Num == 0)) { tn.Parent.SelectedImageIndex = 0; tn.Parent.ImageIndex = 0; } else { tn.Parent.StateImageIndex = 1; tn.Parent.ImageIndex = 1; } //递归 SetNodeImg22(tn.Parent); } 完整源码下载 http://download.csdn.net/source/3166224