zoukankan      html  css  js  c++  java
  • 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的接口就行了
    后者的设计更符合面向对象的思想

    ******************************************

    不重复插入

    View Code
    for(int   i=0;i<listBox1.Items.Count;i++)   
    {
    if(! listBox1.SelectedItems.Contains(listBox1.Items[i]))
    {
    MessageBox.Show(listBox1.Items[i].ToString());
    }
    }
  • 相关阅读:
    16个能帮你找到网页设计灵感的网站
    Charts 图表插件
    jquery获取text,areatext,radio,checkbox,select值(转)
    原型开发、模型构建和设计反馈在线工具
    AutoComplete 自动完成插件(2)
    以蓝色为主题的网站设计灵感
    25个必须要学会的jQuery幻灯片插件教程(中)
    25个必须要学会的jQuery幻灯片插件教程(上)
    极具创意和趣味性的网站404错误页面设计集合
    用CSS制作横向菜单
  • 原文地址:https://www.cnblogs.com/wangchunming/p/2282615.html
Copyright © 2011-2022 走看看