转:c# 关于LISTBOX的添加项的问题 以及不重复插入

我以前没有用过windows form上的东西,web上很简单,html的标签支持元素的value属性。我使用过delphi的combox和listbox,它的items是个 stringList类型的东西,每个元素是一个字符串,同时能保存一个object;使用的时候往往定义个object的子类型,然后添加到items 时new一个这种对象,最后还要管理这个对象的释放.
      那么打开msdn看看windows form上的listbox吧
      经过研究猜想是这样:
            ListBox.Items 的类型是ListBox.ObjectCollection类型
            他的add函数参数是一个object,而不是string
            那么按理说,一个元素类型是object,那么系统显示这个元素的时候自然需要ToString()
      所以也许可以这样做:
            在窗口内写一个小类,继承自object
            包含两个string的数据成员
            一个是名字,一个是id
            然后重载基类object的函数Tostring()
            让这个小类的tostring 函数return name;
            定义好这个类以后,
            当添加记录到列表框的时候,
            new 一个小类的对象
            把名字和id赋值到两个成员
            然后listbox1.items.add(yourObj);
            这样大概就行了
            然后在使用的时候
            obj=Listbox1.selected......
            obj.id .....
代码:
-------------------------------------------------------------
    ///
    /// 列表框元素对象
    ///
    ///
    public class MyItem : object
    {   
        public string name;
        public string id;
        public override string ToString()
        {
            // TODO:  添加 MyItem.ToString 实现
            return name;
        }
    }
----------------------------------------------------
        private void Form1_Load(object sender, System.EventArgs e)
        {
            MyItem item1=new MyItem();
            item1.id="001";
            item1.name="天下";
            this.listBox1.Items.Add(item1);
            MyItem item2=new MyItem();
            item2.id="002";
            item2.name="天上";
            this.listBox1.Items.Add(item2);
            MyItem item3=new MyItem();
            item3.id="003";
            item3.name="地下";
            this.listBox1.Items.Add(item3);
            MyItem item4=new MyItem();
            item4.id="004";
            item4.name="地上";
            this.listBox1.Items.Add(item4);
        }
------------------------------------------------------
        private void button1_Click(object sender, System.EventArgs e)
        {
            MyItem tmp =(MyItem)this.listBox1.Items[this.listBox1.SelectedIndex];
            MessageBox.Show(tmp.id);
        }
经过测试,果然如此,哈哈
=========================

感想
=============
从listbox这样的小地方可以看出
.net的类库设计的确很优雅
很能体现思想
比如这个列表框的元素,这个元素不是一个string,
因为设计者料到 , 用户拿列表框不是仅仅作为string来用, 所以他把item抽象成object
但是还要正常显示元素的文本,
所以他在显示文本的时候就调用object的ToString
这样
就优雅的多了
用户(程序员)可以使用任何的数据类型作为元素类型,只要此元素支持Tostring就行了
而.net的所有类型都继承自object
所以Tostring就是 Items和item的一个标准"接口"
-----------------------------------------------------------------
再看delphi的ListBox,他的items是一个stringList ,
stringList的每个元素必须首先"是"一个字符串
然后相应的字符串可以对应一个额外的Object
相比.net的设计, item不必"是"一个字符串 (它可以是任何类型)
只要这个类型能向Items提供一个ToString的接口就行了
后者的设计更符合面向对象的思想
******************************************

不重复插入

for(int   i=0;i
  {  
  if(!   listBox1.SelectedItems.Contains(listBox1.Items[i]))  
  {  
  MessageBox.Show(listBox1.Items[i].ToString());  
  }  
  }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值