资源简介

C#中,在ListView下显示大量信息时,需要在VirtualMode模式下才能够实现快速高性能操作.但是,在VirtualMode模式下,CheckBoxes的实现却不是那么简单,不能通过设定CheckBoxes = true来实现,还要有特别的处理才能显示选择框. 最近需要用到带CheckBoxes的VirtualMode模式的ListView控件,通过查找资料和研究,终于搞定,和朋友们分享.考虑到其中的辛苦,大家多给点分支持下吧

资源截图

代码片段和文件信息

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;

namespace ListViewTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender EventArgs e)
        {

            lstData.RetrieveVirtualItem += new RetrieveVirtualItemEventHandler(listView_RetrieveVirtualItem);

            lstData.CheckBoxes = true;
            lstData.VirtualListSize = lstData.VirtualListSize;
            lstData.VirtualMode = true;
            lstData.OwnerDraw = false;
//             lstData.DrawItem +=
//                 new DrawListViewItemEventHandler(listView_DrawItem);
            lstData.MouseClick += new MouseEventHandler(listView_MouseClick);
            lstData.MouseDoubleClick += new MouseEventHandler(listView_MouseDoubleClick);
        }
        // 也可以用这种方式刷出复选框 但是列表标题会乱掉
//         void listView_DrawItem(object sender  DrawListViewItemEventArgs e)
//         {
//             e.DrawDefault = true;
//             if (!e.Item.Checked)
//             {
//                 e.Item.Checked = true;
//                 e.Item.Checked = false;
//             }
//         }
        void listView_MouseClick(object sender MouseEventArgs e)
        {
            ListView lv = (ListView)sender;
            ListViewItem lvi = lv.GetItemAt(e.X e.Y);
            if (lvi != null)
            {
                if (e.X < (lvi.Bounds.Left + 16))
                {
                    lvi.Checked = !lvi.Checked;
                    lv.Invalidate(lvi.Bounds);
                }
            }
        }
        void listView_MouseDoubleClick(object sender MouseEventArgs e)
        {
            ListView lv = (ListView)sender;
            ListViewItem lvi = lv.GetItemAt(e.X e.Y);
            if (lvi != null)
                lv.Invalidate(lvi.Bounds);
        }

        private MyListSorter m_MySorter = new MyListSorter();

        private List m_lstListItem = new List();
        void listView_RetrieveVirtualItem(object sender RetrieveVirtualItemEventArgs e)
        {
            try
            {
                e.Item = m_lstListItem[e.ItemIndex];
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void btnAdd_Click(object sender EventArgs e)
        {
            int NR = int.Parse(txtCount.Text);
            
            try
            {
                ListViewItem lstItem = null;
                // 构造列表内容并添加
                string[] strItem = new string[lstData.Columns.Count];
                for (int i = 0; i < NR; i++)
                {
                    for (int j = 0; j

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      16896  2013-02-04 10:59  ListViewTest\bin\Debug\ListViewTest.exe

     文件      38400  2013-02-04 10:59  ListViewTest\bin\Debug\ListViewTest.pdb

     文件      14328  2013-02-04 11:03  ListViewTest\bin\Debug\ListViewTest.vshost.exe

     文件        490  2009-06-11 05:14  ListViewTest\bin\Debug\ListViewTest.vshost.exe.manifest

     文件      21504  2013-02-04 14:57  ListViewTest\bin\x86\Debug\ListViewTest.exe

     文件      54784  2013-02-04 14:57  ListViewTest\bin\x86\Debug\ListViewTest.pdb

     文件      14848  2013-02-04 14:55  ListViewTest\bin\x86\Debug\ListViewTest.vshost.exe

     文件        490  2009-06-11 05:14  ListViewTest\bin\x86\Debug\ListViewTest.vshost.exe.manifest

     文件       7561  2013-02-04 14:57  ListViewTest\Form1.cs

     文件      10862  2013-02-04 14:57  ListViewTest\Form1.Designer.cs

     文件       5814  2013-02-04 14:56  ListViewTest\Form1.resx

     文件      11143  2013-02-04 11:48  ListViewTest\ListViewEx.cs

     文件       4643  2013-02-04 11:43  ListViewTest\ListViewTest.csproj

     文件       1245  2010-05-31 09:56  ListViewTest\MyListSorter.cs

     文件       1374  2013-02-04 11:03  ListViewTest\obj\Debug\ListViewTest.csproj.FileListAbsolute.txt

     文件        847  2013-02-04 10:49  ListViewTest\obj\Debug\ListViewTest.csproj.GenerateResource.Cache

     文件      16896  2013-02-04 10:59  ListViewTest\obj\Debug\ListViewTest.exe

     文件        180  2013-02-04 10:49  ListViewTest\obj\Debug\ListViewTest.Form1.resources

     文件      38400  2013-02-04 10:59  ListViewTest\obj\Debug\ListViewTest.pdb

     文件        180  2013-01-31 16:09  ListViewTest\obj\Debug\ListViewTest.Properties.Resources.resources

     文件        719  2013-02-04 14:55  ListViewTest\obj\x86\Debug\ListViewTest.csproj.FileListAbsolute.txt

     文件        847  2013-02-04 14:57  ListViewTest\obj\x86\Debug\ListViewTest.csproj.GenerateResource.Cache

     文件      21504  2013-02-04 14:57  ListViewTest\obj\x86\Debug\ListViewTest.exe

     文件        180  2013-02-04 14:57  ListViewTest\obj\x86\Debug\ListViewTest.Form1.resources

     文件      54784  2013-02-04 14:57  ListViewTest\obj\x86\Debug\ListViewTest.pdb

     文件        180  2013-02-04 11:43  ListViewTest\obj\x86\Debug\ListViewTest.Properties.Resources.resources

     文件        493  2010-05-31 09:35  ListViewTest\Program.cs

     文件       1368  2010-05-31 09:35  ListViewTest\Properties\AssemblyInfo.cs

     文件       2874  2010-05-31 09:35  ListViewTest\Properties\Resources.Designer.cs

     文件       5612  2010-05-31 09:35  ListViewTest\Properties\Resources.resx

............此处省略21个文件信息

评论

共有 条评论