一直做WebForm, 对于Winform也只仅限于偶尔写一些小程序。

最近因为写了一采集网站数据的小程序,里边要对批量采集到的html页面进行编辑

里边用到了ListBox,显示的时候发现显示文件路径太长了,我只需要文件名就够了,

但是还希望能够有个value值来保存路径,经查看,listbox的items只是一个objectcollection

并没有value,上网爬了一番,发现一朋友写了既然是object,那么应该是可以让我们自己定义。

于是乎自己写了一个Item类:

 

MyListItem

 

在绑定数据的时候,我用了对象数组:

            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);//注:这里可以不用自定义,用标准事件的委托即可

 

添加事件后的MyListItem

 

在绑定数据的之后,给双击事件加上处理程序,删除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;
            item.DoubleClick();

 

======================

后记:其实在ListBox的双击事件里,我们完全可以删除一个Item,之所以没有那样写,

是想通过一个需求,一个实例来和大家一起分享事件的工作原理,希望对大家有所裨益。

这边写的这个整站采集的工具,如有人感兴趣,可以拿出来大家分享。

posted on 2009-07-15 16:28  沉默的心  阅读(3358)  评论(1编辑  收藏  举报