返回首页

{A}
{S0}
简介
本文演示了两个简单的方法,使用单独的显示和ListBox控件和ComboBox控件的值。这些控制项目类型的对象实体。在这里,它是展示如何操纵,以获得所需的的结果。背景
几次,人来对我说,他们希望显示在ComboBox和选择一些价值,他们要检索的用户是不可见的的其他一些价值。我发现大多数初学者在这种情况下,面临麻烦。所以我想,为什么不把这个解决方案的代码项目,使初学者的用户可以解决这个常见问题。 基本思路
当一个对象被添加这些控件的项目,这些控件调用ToString()方法显示。事实上,当一个对象为项目添加,然后控制就会显示文本对象的toString()方法,但项目仍保持对象的状态,因此,人们可以很容易操纵。因此,这些项目可用于检索,因为它是整个对象。第二种方法是简单绑定的数据源的控制和设置显示和价值的目的的列名。引人注目的一点是,你可以有大量列,其中一列可用于显示文字和一列值成员可以使用一个DataTable。使用代码
的代码是非常简单和言自明。 ItemObject是类次显示文字的控制作用。

public class ItemObject

{

    private string key;

    private object valueOfKey;



    /// <summary>

    /// Overloaded constructor.

    /// </summary>

    /// <param name="key">Key of object.</param>

    /// <param name="valueOfKey">Value of object.</param>

    public ItemObject(string key, object valueOfKey)

    {

        this.key = key;

        this.valueOfKey = valueOfKey;

    }



    /// <summary>

    /// Default constructor

    /// </summary>

    public ItemObject()

    {

        key = string.Empty;

        valueOfKey = string.Empty;

    }



    ///<summary>

    ///Returns a <see cref="T:System.String"></see> that represents the current 

    ///<see cref="T:System.Object">

    /// </see>.

    ///</summary>

    ///

    ///<returns>

    ///A <see cref="T:System.String"></see> that represents the current 

    ///<see cref="T:System.Object">

    /// </see>.

    ///</returns>

    public override string ToString()

    {

        return key;

    }



    ///<summary>

    ///Serves as a hash function for a particular type. 

    ///</summary>

    ///

    ///<returns>

    ///A hash code for the current <see cref="T:System.Object"></see>.

    ///</returns>

    public override int GetHashCode()

    {

        return ToString().GetHashCode();

    }



    /// <summary>

    /// Gets or sets Key of object.

    /// </summary>

    public string Key

    {

        get { return key; }

        set { key = value; }

    }



    /// <summary>

    /// Gets or sets Value of object.

    /// </summary>

    public object ValueOfKey

    {

        get { return valueOfKey; }

        set { valueOfKey = value; }

    }

}
兴趣点
ItemObject类是上述类的容器对象。您可以为您的要求设计自己的容器对象。
的toString()方法是,这里的关键是从应用程序调用toString()方法时,它会返回的重点对象。这解决了陈列的目的。就这么简单!
您可以使用其他类型也与这些控件的DataSource。历史第16届,2007年6月:代码的第一释放
如果你喜欢像这样解决了一个简单的发展问题的文章,请给予反馈。关于Proteans软件解决方案
Proteans是外包公司在微软技术平台的软件产品开发和业务应用开发为重点。 Proteans合作伙伴与独立软件开发商(ISV)的,系统集成商和企业IT团队开发的软件产品。我们的技术重点和重要的经验,在软件产品的开发 - 设计,建设,并释放世界级的,强大和可扩展的软件产品,帮助我们,以减少市场的时间,降低成本,降低经营风险,提高整体业务结果,为我们的客户。 Proteans的专业知识,在使用Microsoft。NET技术的发展。

回答

评论会员:kboyette 时间:2011/12/14
我发现这篇文章非常有用。现在,我试图从ListBox中删除一个项目的问题。我知道通常listBox1.Items.Remove(item1的)工作,但我需要移除特定对象的关键以来,在我的情况,可以是相同的ListBox中的多个项目。
的基本价值是不同的。
再次感谢您的文章。

凯文
评论会员:Nihar_CodePro 时间:2011/12/14
本文看起来有用,但它解决一个小问题
这是一个典型的问题,开发人员面临的,可热门文章。

Nihar
评论会员:gajatko 时间:2011/12/14
有用的文章。截至今天,我使用ListView的,只是因为它的项目有"标签"属性。我真的不认为压倒一切的ToString()方法的可能性!

问候语 - gajatko。
评论会员:sharpiesharpie 时间:2011/12/14
我试图制定一个结构,将它添加到组合框,然后OBJ保持空的,即使我没有完全应该。下面的代码:
结构项目
{
 0; 私人字符串键
 0; 私人对象valueOfKey
&# 160; 公共字符串键
 0; {
得到{回车键;}
& #160;设置{为key = value;}
}
公共对象ValueOfKey
{
  ; {返回valueOfKey;}
 0; 设置{valueOfKey =值;}
 0; }
&# 160; 公共重写字符串的ToString()
&# 160; {
& #160; 回车键;
}
 0; 公众覆盖INT GetHashCode的()
{
&# 160; 的ToString()返回的GetHashCode();
}
 0;}

然后我把它添加到组合框:
  ; 项目B =新的项目()
 60; b.Key ="显示"66";
b.ValueOfKey ="值66";
& #160;
cbxSource.Items.Add(B);
但是当我尝试,并单击该值按钮,它什么也不做,我检讨与断点和它保持空... ...任何想法,为什么呢?
评论会员:布拉德布鲁斯 时间:2011/12/14
的第一件事,我发现了...

在btnValue_Click功能,您需要更改
ItemObject OBJ = cbxSource.SelectedItem ItemObject; 项目OBJ = cbxSource.SelectedItem项目;

如果被引用的数据是不是指定的类型,你会得到一个NULL。

一旦我这样做,我有一个不同的错误。您需要更改
结构项目公共类项目

然后它的工作。

布拉德

评论会员:sharpiesharpie 时间:2011/12/14
好了,我只是试图用一个结构,因为它是很好的内存使用效率,更快,更... ...我知道它应该工作,如果我使用"项目",但我想尝试我的项目转换到ItemObject因为我建立了我的项目完全一样ItemObject相同的方式。
评论会员:布拉德布鲁斯 时间:2011/12/14
,但它不是ItemObject或从ItemObject
派生
评论会员:格雷格Cadmes 时间:2011/12/14
...内存更快,更高效
并非总是如此。尤其是在循环结构发生了很多拳。

欢呼

格雷格