分享
 
 
 

ListView的使用

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

ListView控件是一个比较复杂的控件。它可以在它的标准列表框中进行各种查看操作(如大图标,小图标,详细信息等)

下面做一个简单的例子。

创建一个新窗体form1

在上面添加几个控件如下:

再添加两个imagelist控件,取名为smallIL与largeIL,把largeIL的imagesize设为32,32,并为它的images添加两个ICON,一个为文件夹图标,一个为文件图标。也为smallIL添加两个这样的图标。

然后设置listview的smallimagelist为smallIL,largeimagelist为largeIL,view为details

下面说明一下listview显示为details(详细信息)时的几个要点:

listview的选项

列表视图中的主选项是一个ListViewItem类的实例,然后这个选项又有一个子选项SubItems,如果ListView在details模式下,子选项就会显示出来。子选项和主选项的区别是,主选项可以有图标,子选项没有。

listview的列标题

columns,也相当于列名。要显示列表题,就要把ColumnsHeader的实例添加到listview的columns中,在listview处于details模式下 ,ColumnsHeader为listview提供一个标题。

现在可以开始编定代码了。

我们首先写一个方法,为listview创建标题

private void createHeader()//为listview添加列名

{

ColumnHeader ch=new ColumnHeader();

ch.Text="文件名";

this.listView1.Columns.Add(ch);

ch=new ColumnHeader();

ch.Text="大小";

this.listView1.Columns.Add(ch);

ch=new ColumnHeader();

ch.Text="修改日期";

this.listView1.Columns.Add(ch);

}

然后再写一个方法,为listview添加选项

private void createitem(string root)

{

ListViewItem lvi;

ListViewItem.ListViewSubItem lvsi;

System.IO.DirectoryInfo dir=new System.IO.DirectoryInfo(root);

System.IO.DirectoryInfo[] dirs=dir.GetDirectories();

System.IO.FileInfo[] files=dir.GetFiles();

listView1.Clear();//注意这个函数是把listview里的所有选项与所列名都删除

listView1.BeginUpdate();

foreach(System.IO.DirectoryInfo di in dirs)

{

lvi=new ListViewItem();

lvi.Text=di.Name;

lvi.Tag=di.FullName;

lvi.ImageIndex=0;

lvsi=new System.Windows.Forms.ListViewItem.ListViewSubItem();

lvsi.Text="";

lvi.SubItems.Add(lvsi);

lvsi=new System.Windows.Forms.ListViewItem.ListViewSubItem();

lvsi.Text=di.LastAccessTime.ToString();

lvi.SubItems.Add(lvsi);

this.listView1.Items.Add(lvi);

}

foreach(System.IO.FileInfo fi in files)//把文件信息添加到listview的选项中

{

lvi=new ListViewItem();

lvi.Text=fi.Name;

lvi.ImageIndex=1;

lvi.Tag=fi.FullName;

lvsi=new System.Windows.Forms.ListViewItem.ListViewSubItem();

lvsi.Text=fi.Length.ToString();

lvi.SubItems.Add(lvsi);

lvsi=new System.Windows.Forms.ListViewItem.ListViewSubItem();

lvsi.Text=fi.LastAccessTime.ToString();

lvi.SubItems.Add(lvsi);

this.listView1.Items.Add(lvi);

}

this.listView1.endupdate();

}

然后在Form1的构造函数里添加:

public Form1()

{

createitem(@“c:\“);//注意这两个函数的次序不能颠倒,因为createitem里有一句命令listView1.clear()

把所有的列名也都删除了,如果createheader在前,listview就没有列名了。

createheader();

}

现在运行程序,就可以看到listview里面列出了所有c:\下的文件夹与文件信息,

下面再添加四个 单选按钮的事件处理程序

private void rdosmall_CheckedChanged(object sender, System.EventArgs e)

{

if(this.rdosmall.Checked==true)

{

this.listView1.View=View.SmallIcon;

}

}

private void rdolarge_CheckedChanged(object sender, System.EventArgs e)

{

if(this.rdolarge.Checked==true)

{

this.listView1.View=View.LargeIcon;

}

}

private void rdodetails_CheckedChanged(object sender, System.EventArgs e)

{

if(this.rdodetails.Checked==true)

{

this.listView1.View=View.Details;

}

}

private void rdolist_CheckedChanged(object sender, System.EventArgs e)

{

if(this.rdolist.Checked==true)

{

this.listView1.View=View.List;

}

}

现在运行程序,点击单选按钮,就可以变换listview的显示模式。

下面再为listview的itemActivate事件添加处理程序,目 的是当我们选择listview中的选项时,如果它是文件夹就打开这个文件夹,显示里面的信息,如果它是文件,就打开这个文件。

不过我们还应该注意一点,就是当我们打开一个新文件夹时,还会用到后退功能。所以,我们应该用一个字符串记录下前一个文件夹路径,用于后退到这个前一个文件夹

下面,我们在类Form1中添加个成员

private System.Collections.Specialized.StringCollection colstr=new System.Collections.Specialized.StringCollection();

然后添加itemActivate的处理程序

首先在Form1的构造函数里添加

this.listView1.ItemActivate+=new EventHandler(listView1_ItemActivate);

然后添加函数

private void listView1_ItemActivate(object sender,System.EventArgs e)

{

ListView lv=(ListView)sender;

string filename=lv.SelectedItems[0].Tag.ToString();

if(lv.SelectedItems[0].ImageIndex==0)//如果是文件夹,就打开它

{

createitem(filename);

createHeader();

colstr.Add(filename);//把打开的方件夹的路径记录下来,

这里是因为我们现在的路径是已知的,不用记录。

}

else//如果是文件,就执行它

{

System.Diagnostics.Process.Start(filename);

}

}

下面,再添加BACK按钮的CLICK事件处理程序,实现后退功能

private void btnback_Click(object sender, System.EventArgs e)

{

if(colstr.Count>1)

{

createitem(colstr[colstr.Count-2]);

colstr.RemoveAt(colstr.Count-1);

createHeader();

}

else if(colstr.Count==1)

{

createitem(@"c:\");

createHeader();

colstr.Clear();

}

}

好了,现在所有的功能都实现了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有