65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在组合框/列表框中分别放置显示值和实际值?

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.70/5 (31投票s)

2007 年 6 月 16 日

CPOL

2分钟阅读

viewsIcon

63359

downloadIcon

794

本文演示了如何使用对象作为组合框和列表框中的项目并操作它们。

Screenshot - ComboBoxDemo1.png

Screenshot - ComboBoxDemo2.png

引言

本文演示了两种简单的方法,可以为列表框控件和组合框控件使用单独的显示值和实际值。 这些控件采用 object 类型的实体作为项目。 这里演示了如何操作它以获得所需的结果。

背景

很多人多次来找我说他们想在组合框中显示一些值,然后在选择时,他们想检索一些用户不可见的其他值。 我发现大多数初学者在这种情况下都会遇到麻烦。 所以我想为什么不把这个解决方案放在 Code Project 上,以便初学者可以解决这个常见问题。

基本思想

当将一个 object 作为项目添加到这些控件时,这些控件会调用 ToString() 方法来获取显示值。 因此,可以很容易地操作这样一个事实:当添加 object 作为项目时,控件将从 ObjectToString() 方法中获取显示文本,但项目仍然保持该 object 的状态。 因此,可以使用这些项目来检索整个 object 。 第二种方法是简单地将 DataSource 绑定到控件,并设置用于显示和值的列名。 值得注意的是,你可以拥有一个包含大量列的 DataTable,其中一列可以用于显示文本,另一列可以用于值成员。

Using the Code

代码非常简单且具有自我解释性。 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 类是上述类的容器对象。 您可以根据您的需求设计您自己的容器 object

ToString() 方法是这里的 key,因此每当从应用程序调用 ToString() 时,它将返回 objectKey。 这解决了显示问题。 非常简单!!!

您也可以将其他类型的 DataSource 与这些控件一起使用。

历史

  • 2007 年 6 月 16 日:代码的首次发布

如果您喜欢这样解决简单开发问题的文章,请提供反馈。

关于 Proteans 软件解决方案

Proteans 是一家外包公司,专注于 Microsoft 技术平台上的软件产品开发和业务应用程序开发。 Proteans 与独立软件供应商 (ISV)、系统集成商和企业的 IT 团队合作开发软件产品。 我们在软件产品开发方面的技术重点和丰富经验 - 设计、构建和发布世界一流、稳健且可扩展的软件产品 - 帮助我们缩短上市时间、降低成本、降低业务风险并改善我们客户的整体业务成果。 Proteans 擅长使用 Microsoft .NET 技术进行开发。

© . All rights reserved.