开发手记之-在Winform中为ListBox的添加选项值,并增加双击事件

本文介绍如何在C#中自定义ListBox项以存储额外的数据,并实现双击事件来删除指定项。通过创建自定义类myListItem,可以方便地管理和使用ListBox中的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

 

ContractedBlock.gifExpandedBlockStart.gifMyListItem
 1    public class myListItem : Object
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        private string _name;
 4        private string _value;
 5
 6        public myListItem()
 7ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 8
 9        }

10        public myListItem(string name, string value)
11ExpandedSubBlockStart.gifContractedSubBlock.gif        {
12            _name = name;
13            _value = value;
14        }

15        public string Name
16ExpandedSubBlockStart.gifContractedSubBlock.gif        {
17ExpandedSubBlockStart.gifContractedSubBlock.gif            get return _name; }
18ExpandedSubBlockStart.gifContractedSubBlock.gif            set { _name = value; }
19        }

20        public string Value
21ExpandedSubBlockStart.gifContractedSubBlock.gif        {
22ExpandedSubBlockStart.gifContractedSubBlock.gif            get return _value; }
23ExpandedSubBlockStart.gifContractedSubBlock.gif            set { _value = value; }
24        }

25        public override string ToString()
26ExpandedSubBlockStart.gifContractedSubBlock.gif        {
27            return _name;
28        }

29    }

30

 

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

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

 

ContractedBlock.gifExpandedBlockStart.gif添加事件后的MyListItem
 1    public class myListItem : Object
 2ExpandedBlockStart.gifContractedBlock.gif    {
 3        private string _name;
 4        private string _value;
 5        public event ItemDoubleClickEvent  OnItemDoubleClick;
 6
 7        public void DoubleClick()
 8ExpandedSubBlockStart.gifContractedSubBlock.gif        {
 9            if (OnItemDoubleClick != null)
10ExpandedSubBlockStart.gifContractedSubBlock.gif            {
11                OnItemDoubleClick(this,new EventArgs());
12            }

13        }

14        public myListItem()
15ExpandedSubBlockStart.gifContractedSubBlock.gif        {
16
17        }

18        public myListItem(string name, string value)
19ExpandedSubBlockStart.gifContractedSubBlock.gif        {
20            _name = name;
21            _value = value;
22        }

23        public string Name
24ExpandedSubBlockStart.gifContractedSubBlock.gif        {
25ExpandedSubBlockStart.gifContractedSubBlock.gif            get return _name; }
26ExpandedSubBlockStart.gifContractedSubBlock.gif            set { _name = value; }
27        }

28        public string Value
29ExpandedSubBlockStart.gifContractedSubBlock.gif        {
30ExpandedSubBlockStart.gifContractedSubBlock.gif            get return _value; }
31ExpandedSubBlockStart.gifContractedSubBlock.gif            set { _value = value; }
32        }

33        public override string ToString()
34ExpandedSubBlockStart.gifContractedSubBlock.gif        {
35            return _name;
36        }

37    }

38

 

在绑定数据的之后,给双击事件加上处理程序,删除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,之所以没有那样写,

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

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

转载于:https://www.cnblogs.com/neilvension/archive/2009/07/15/1524254.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值