You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Winform中以Dictionary为ComboBox数据源:选中后显示键而非值

WinForm ComboBox 绑定Dictionary实现下拉显示Value、选中后显示Key

要实现下拉列表显示省份名称(Dictionary的Value),选中后输入框显示对应编码(Dictionary的Key),仅通过设置DisplayMember和ValueMember无法实现,需要通过自定义绘制来控制显示内容,具体步骤如下:

实现步骤

  1. 保持原有的数据源绑定逻辑,确保下拉列表的数据源正确。
  2. 将ComboBox的DrawMode设置为OwnerDrawFixed,开启自定义绘制。
  3. 处理DrawItem事件,区分下拉列表项和输入框显示项,分别绘制Value和Key。

完整代码示例

public readonly Dictionary<string, string> Provinces = new()
{
    { "01", "Ontario" },
    { "02", "Quebec" },
    { "03", "British Columbia" }
};

public ProvincesView()
{
    InitializeComponent();

    // 绑定数据源
    this.cbProvinces.DataSource = new BindingSource(Provinces, null);
    this.cbProvinces.DisplayMember = "Value";
    this.cbProvinces.ValueMember = "Key";
    
    // 开启自定义绘制模式
    this.cbProvinces.DrawMode = DrawMode.OwnerDrawFixed;
    // 绑定绘制事件
    this.cbProvinces.DrawItem += CbProvinces_DrawItem;
    
    // 可选:设置为下拉列表样式,禁止手动输入(避免显示混乱)
    this.cbProvinces.DropDownStyle = ComboBoxStyle.DropDownList;
}

private void CbProvinces_DrawItem(object sender, DrawItemEventArgs e)
{
    var comboBox = sender as ComboBox;
    if (comboBox == null || e.Index < 0) return;

    // 获取当前项的键值对
    var selectedItem = (KeyValuePair<string, string>)comboBox.Items[e.Index];

    // 绘制控件背景
    e.DrawBackground();

    // 判断当前绘制的是下拉列表中的项,还是输入框显示的项
    bool isDropDownItem = (e.State & DrawItemState.ComboBoxEdit) == 0;
    // 下拉项显示省份名称(Value),输入框显示编码(Key)
    string displayText = isDropDownItem ? selectedItem.Value : selectedItem.Key;

    // 绘制文本内容
    using (var textBrush = new SolidBrush(e.ForeColor))
    {
        e.Graphics.DrawString(displayText, e.Font, textBrush, e.Bounds);
    }

    // 绘制焦点框(提升交互体验)
    e.DrawFocusRectangle();
}

说明

  • 通过DrawItemState.ComboBoxEdit判断绘制的是输入框显示项还是下拉列表项,从而决定显示Key或Value。
  • 设置DropDownStyle = ComboBoxStyle.DropDownList可以禁止用户手动输入文本,避免显示逻辑混乱;若需要允许输入,可调整为DropDown并额外处理TextChanged事件。

内容的提问来源于stack exchange,提问作者lostwords

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 16:00:24