C# WinForm ComboBox与ListBox自定义项及默认值设置

花开有时
花开有时
发布时间:2026-10-14 | 1人浏览过
原创

在C# WinForm开发中,ComboBox和ListBox等下拉列表控件没有内置类似Web端DropDownList的ListItem类。为了实现同时存储显示文本(名称)和隐藏值(ID),需要自定义一个类并重载ToString方法。本文将介绍如何定义该自定义项类,以及如何在窗体加载时向控件添加项并设置默认选中状态。

创建自定义ListItem类

由于ComboBox的Item集合接受任意对象,并在显示时调用其ToString()方法进行渲染,我们需要创建一个包含ID和Name属性的类,并确保正确重载ToString()方法,使其返回Name而非默认的类名。

using System;

namespace WinListItem
{
  /// <summary>
  /// 用于ComboBox或ListBox的自定义选择项类
  /// </summary>
  public class ListItem
  {
    private string id = string.Empty;
    private string name = string.Empty;

    // 构造函数:初始化ID和显示名称
    public ListItem(string sid, string sname)
    {
      id = sid;
      name = sname;
    }

    /// <summary>
    /// 获取显示的文本内容
    /// </summary>
    public override string ToString()
    {
      return this.name;
    }

    public string ID
    {
      get { return this.id; }
      set { this.id = value; }
    }

    public string Name
    {
      get { return this.name; }
      set { this.name = value; }
    }
  }
}

在窗体中添加项并设置默认值

实例化自定义的ListItem对象后,通过Items.Add方法添加到ComboBox中。可以通过SelectedIndex索引或SelectedItem对象来设置默认选中的项。

using System;
using System.Windows.Forms;

namespace WinListItem
{
  public partial class MainFrm : Form
  {
    public MainFrm()
    {
      InitializeComponent();
    }

    private void MainFrm_Load(object sender, EventArgs e)
    {
      // 1. 创建自定义项实例
      ListItem listItem0 = new ListItem("0", "选项零");
      ListItem listItem1 = new ListItem("1", "选项一");
      ListItem listItem2 = new ListItem("2", "选项二");

      // 2. 将项添加到ComboBox
      comboBox1.Items.Add(listItem0);
      comboBox1.Items.Add(listItem1);
      comboBox1.Items.Add(listItem2);

      // 3. 设置默认选中项
      // 方法A:通过索引设置(下标从0开始)
      comboBox1.SelectedIndex = 0; 

      // 方法B:通过对象引用设置(需确保该对象已在Items集合中)
      // comboBox1.SelectedItem = listItem1;
    }

    // 示例:获取选中项的值
    private void btnOk_Click(object sender, EventArgs e)
    {
      if (comboBox1.SelectedItem is ListItem selectedItem)
      {
        MessageBox.Show($"ID: {selectedItem.ID}, Name: {selectedItem.Name}");
      }
    }
  }
}

关键注意事项

如果未重载ToString()方法,直接添加自定义对象会导致下拉列表中显示“命名空间+类名”而非用户定义的Name字段。此外,若使用DataBind方式进行数据绑定,可分别指定DisplayMember和ValueMember属性来实现相同效果。

以上就是C# WinForm ComboBox与ListBox自定义项及默认值设置的详细内容,更多关于C# GUI开发技巧的资料请关注本站其它相关文章!
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表