Treeview动态加载图片(winform)

 

Treeview动态加载图片(winform)

495人阅读 评论(0) 收藏 举报

问题的提出:在某个软件中,系统主功能通过Treeview来实现各子功能的导航,现要为Treeview动态添加每个功能模块的节点图标,而图标是以二进制的形式存储在数据库中的image字段里面,要通过在主界面初始加载的时候就显示对应节点的图片。为此下面给出一种解决方案。­

一.读取图片­

首先我们应该将图片从数据库里面读取出来,将读取出来的图片添加在imagelist对象中,因为treeview中的节点图片必须来源于imagelist对象中的值。主要代码如下:­

­

public System.Drawing.Bitmap GetSystemFunctionModulImage(string modulName)­

       {­

           byte[] buffer = null;­

           System.Data.SqlClient.SqlParameter[] param ={ new System.Data.SqlClient.SqlParameter("@modulName", System.Data.SqlDbType.VarChar)};­

           param[0].Value = modulName;­

           SqlDataReader dr = DBUtility.SqlServerHelper.ExecuteReader(CommandType.Text, SQL_SELECT_GETSYSTEMFUNCTIONMODULIMAGE/*SQL语句,根据自己实际情况而定*/, param);//这是我的自定义方法­

           if (dr.Read() && dr[0].ToString() !="")­

           {­

               buffer = (byte[])dr.GetValue(0);­

               dr.Close();­

           }­

           System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer);­

           System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ms);­

           return bmp;­

       }­

主要代码见红色部分,这是读取图片的方法,dr里面保存的就是二进制图片文件,通过以上方法转换为位图文件格式。­

二.将读取的图片填充到imagelist中,主要代码如下:­

private void LoadSystemFunctionModulInfo()­

        {­

            ImageList img = new ImageList();­

            SystemFunctionModulLogic systemFunctionModulLogic = new SystemFunctionModulLogic();­

            ds = systemFunctionModulLogic.GetSystemFunctionModulInfo(User.UserNo);­

            DataRow[] DR = ds.Tables[0].Select("FatherModulNo=0");­

            //Test--------------------------载入模块图片­

            System.Data.SqlClient.SqlDataReader reader = systemFunctionModulLogic.GetUserSystemFunctionModulInfo(User.UserNo);//这个自定义方法是根据当前用户的权限所属的功能模块信息,在reader中保存的是模块名称,根据自己的实际情况而定,大家无需在意­

            while (reader.Read())­

               {­

                   Bitmap bmp = systemFunctionModulLogic.GetSystemFunctionModulImage(reader[1].ToString().Trim());­

                   img.Images.Add(bmp);­

               ­

               }­

               reader.Close();­

           //}­

          //---------------------------------­

­

            img.ImageSize = new Size(32, 32);­

         ­

            treeViewFunctionModuleinfo.ImageList = img;­

            treeViewFunctionModuleinfo.ImageIndex = 0;//初始索引号为0,主要代码­

            /*为treeview的每个节点添加图片,根据自己的实际情况而定­

            foreach (DataRow dr in DR)­

            {­

                TreeNode tn = new TreeNode();­

                tn.Text = dr[1].ToString().Trim();­

                tn.Tag = dr[0].ToString();­

                treeViewFunctionModuleinfo.Nodes.Add(tn);­

                tn.ImageIndex = treeViewFunctionModuleinfo.ImageIndex;­

                tn.SelectedImageIndex = treeViewFunctionModuleinfo.ImageIndex;­

                treeViewFunctionModuleinfo.ImageIndex += 1;//索引号的改变,主要代码,这点大家给点建议吧,这是在listimage对象中图片是按照模块对应的顺序存放的,如果不是按顺序存放的,应该怎样解决呢?­

                LoadSonSystemFunctionModulInfo(tn, tn.Tag.ToString());­

                ­

            }­

*/­

        }­

­

注:此方法就是动态为treeview添加图片的简单方法,具体还要根据你的实际情况而定,基本思路就是这样,当然还有更好的方法,希望大家贴出来分享一下。­

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值