.net 中的ListView在SubItem中添加图片的一个方法

 

 

 

 

下面是实现的部分代码:

 

public partial class Form1 : Form
    {
        //在Windwos XP下
        //窗体上包含一个按钮,一个ListView,ListView中有三列,Detail模式,
        public Form1()
        {
            InitializeComponent();
            //imageList1中包含两个图片,大小为18*16;           
            listView1.SmallImageList = imageList1;
            SendMessage(listView1.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_SUBITEMIMAGES, LVS_EX_SUBITEMIMAGES);
        }

 

        private const int LVM_FIRST = 0x1000;
        private const int LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
        private const int LVS_EX_SUBITEMIMAGES = 0x0002;
        private const int LVIF_TEXT = 0x0001;
        private const int LVIF_IMAGE = 0x0002;       
        private const int LVM_SETITEM = LVM_FIRST + 6;
       

        private struct LV_ITEM
        {
            public uint mask;
            public int iItem;
            public int iSubItem;
            public uint state;
            public uint stateMask;
            public IntPtr pszText;
            public int cchTextMax;
            public int iImage;
            public IntPtr lParam;


        }

 

        [DllImport("user32.dll")]
        static extern int SendMessage(IntPtr hwnd, int msg, int wParam, int lParam);

        [DllImport("user32.dll", SetLastError = true)]
        static extern int SendMessage(IntPtr hwnd, int msg, int wParam, ref LV_ITEM lParam);


        private void button1_Click(object sender, EventArgs e)
        {
            ListViewItem item = new ListViewItem("大家");                    
            item.SubItems.Add("我们");
            item.SubItems.Add("他们");
            listView1.Items.Add(item);

            LV_ITEM lvFirst = new LV_ITEM();
            lvFirst.mask = LVIF_TEXT | LVIF_IMAGE;//文本+图片
            lvFirst.iItem = listView1.Items.Count - 1;//设置的某行的行号
            lvFirst.iImage = 0;//imageindex
            lvFirst.iSubItem = 0;//subItem Index
            lvFirst.pszText = Marshal.StringToHGlobalAnsi(item.Text);//这里可以显示汉字。不能用Marshal.StringToHGlobalUni,否则不能正确显示
            SendMessage(listView1.Handle, LVM_SETITEM, 0, ref lvFirst);
           
            //第二列显示图片
            LV_ITEM lvitem = new LV_ITEM();
            lvitem.mask = LVIF_TEXT | LVIF_IMAGE;
            lvitem.iItem = listView1.Items.Count - 1;
            lvitem.iImage = 1;
            lvitem.iSubItem = 1;
            lvitem.pszText = Marshal.StringToHGlobalAnsi(item.SubItems[1].Text);
            SendMessage(listView1.Handle, LVM_SETITEM, 0, ref lvitem);


            //第三列显示
            LV_ITEM lvitem2 = new LV_ITEM();
            lvitem2.mask = LVIF_TEXT | LVIF_IMAGE;
            lvitem2.iItem = listView1.Items.Count - 1;
            lvitem2.iImage = 0;
            lvitem2.iSubItem = 2;
            lvitem2.pszText = Marshal.StringToHGlobalAnsi(item.SubItems[2].Text);
            SendMessage(listView1.Handle, LVM_SETITEM, 0, ref lvitem2);          

        }
      
      
    }

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值