一直做WebForm, 对于Winform也只仅限于偶尔写一些小程序。
最近因为写了一采集网站数据的小程序,里边要对批量采集到的html页面进行编辑
里边用到了ListBox,显示的时候发现显示文件路径太长了,我只需要文件名就够了,
但是还希望能够有个value值来保存路径,经查看,listbox的items只是一个objectcollection
并没有value,上网爬了一番,发现一朋友写了既然是object,那么应该是可以让我们自己定义。
于是乎自己写了一个Item类:
在绑定数据的时候,我用了对象数组:
myListItem[] items = generateItems(files);
this.listFiles.DataSource = items;
操作的时候,我们可以把ListBox的selectedItem转为MyListItem类型,从而取得Name和Value值
MyListItem item=this.listFiles.SelectedItem;
item.Name...
item.Value...
后边用的时候发现,有些页面我不需要批量编辑,想双击某一个Item就把它从ListBox中删除,于是添加了双击事件。
首先自定义委托
public delegate void ItemDoubleClickEvent(object sender, EventArgs e);//注:这里可以不用自定义,用标准事件的委托即可
在绑定数据的之后,给双击事件加上处理程序,删除Item部分就写在事件处理程序里:
myListItem[] items = generateItems(files);
this.listFiles.DataSource = items;
foreach (object o in this.listFiles.Items)
{
myListItem item = o as myListItem;
item.OnItemDoubleClick += new ItemDoubleClickEvent(item_OnItemDoubleClick);
}
然后在ListBox的双击事件中,调用MyListItem的DoubleClick(),引发双击事件。
myListItem item = this.listFiles.SelectedItem as myListItem;
======================
后记:其实在ListBox的双击事件里,我们完全可以删除一个Item,之所以没有那样写,
是想通过一个需求,一个实例来和大家一起分享事件的工作原理,希望对大家有所裨益。
这边写的这个整站采集的工具,如有人感兴趣,可以拿出来大家分享。