可以先把想改变的图标及改后的图标都放在listView控件中.然后在写程序时动态改变TreeView的图标索引值就可以了.

解决方案 »

  1.   

    应该也可以放在 ImageList 吧?
      

  2.   

    把图标放在ImageList里面。什么时候想改变图标,设置节点的ImageIndex属性就行了!!!
      

  3.   

    1) 先CreateDeptImageList();
    private void CreateDeptImageList()
    {
    try
    {
    ImageList TreeviewIL = new ImageList();
    System.Drawing.Image imageDeptTree01 = Image.FromFile(System.IO.Directory.GetCurrentDirectory()+"\\DeptTree01.ico");
    System.Drawing.Image imageDeptTree02 = Image.FromFile(System.IO.Directory.GetCurrentDirectory()+"\\DeptTree02.ico");
    System.Drawing.Image imageDeptTree03 = Image.FromFile(System.IO.Directory.GetCurrentDirectory()+"\\DeptTree03.ico");
    System.Drawing.Image imageDeptTree04 = Image.FromFile(System.IO.Directory.GetCurrentDirectory()+"\\DeptTree04.ico");
    TreeviewIL.Images.Add(imageDeptTree01);
    TreeviewIL.Images.Add(imageDeptTree02);
    TreeviewIL.Images.Add(imageDeptTree03);
    TreeviewIL.Images.Add(imageDeptTree04);
    this.tvwActAssign.ImageList = TreeviewIL;
    }
    catch(Exception ex)
    {
    ex.ToString();
    }
    }
    2) 再使用递归调用显示子树,InitDeptTree(tvwActAssign.Nodes,"1");
    private void InitDeptTree(TreeNodeCollection Nds,string ParentId)
    {
    try
    {
    //建树的基本思路是:从根节点开始递归调用显示子树.
    ExecuteDBCommand.ExeDBCmd ExeDBSP=new ExecuteDBCommand.ExeDBCmd();
    DataSet ds=new DataSet();
    ds=ExeDBSP.FillComboBoxContents("InitActAssignDeptTree");
    DataView dv=new DataView();
    TreeNode tmpNd;
    string intId,SelEmpActNo;
    dv.Table=ds.Tables[0];
    string ft="ParentDeptCode=" + ParentId.Trim();
    dv.RowFilter=ft.ToString();
    foreach(DataRowView drv in dv)
    {
    tmpNd=new TreeNode();
    tmpNd.Tag=drv["DeptCode"].ToString();
    tmpNd.Text=drv["DeptName"].ToString();
    if (tmpNd.Tag.ToString().Length>2)
    {
    if (tmpNd.Tag.ToString().Substring(0,2)=="#$")
    {
    DataSet dsActNo=new DataSet();
    dsActNo=ExeDBSP.GetSelectedEmpActNo(tmpNd.Tag.ToString(),tmpNd.Text.Trim());
    SelEmpActNo=dsActNo.Tables[0].Rows[0][0].ToString();
    tmpNd.Text=tmpNd.Text+SelEmpActNo;
    if (SelEmpActNo.IndexOf("无帐套",0,SelEmpActNo.Length)!=-1){tmpNd.ForeColor=System.Drawing.Color.Red;}
    tmpNd.ImageIndex =3;tmpNd.ExpandAll();
    }
    else {tmpNd.ImageIndex =1;tmpNd.ExpandAll();}
    }
    else {tmpNd.ImageIndex =1;tmpNd.ExpandAll();}
    Nds.Add(tmpNd);
    intId=drv["ParentDeptCode"].ToString();
    InitDeptTree(tmpNd.Nodes,tmpNd.Tag.ToString());
    }
    }
    catch(Exception ex)
    {
    ex.ToString();
    }
    }
    3)注意:ImageIndex和SelectedImageIndex是不同的.