You need to enable JavaScript to run this app. WinForms中ListBox设置ValueMember不生效导致SelectedValue为空怎么办?
优惠活动
大模型
产品
解决方案
定价
更多

WinForms中ListBox设置ValueMember不生效导致SelectedValue为空怎么办?

WinForms ListBox ValueMember不生效问题原因及解决方案

问题原因

  • 核心原因:ValueMember、DisplayMember两个属性仅在ListBox通过DataSource绑定数据源时才会生效,你当前采用循环往Items集合手动添加元素的方式,这两个属性的配置不会被触发,因此SelectedValue返回空值。
  • 次要错误:你将ValueMember和DisplayMember的赋值逻辑放在了foreach循环内,会重复执行多次赋值,属于无效冗余代码,即使使用数据源绑定也应该仅赋值一次。

解决方案

方案1:使用DataSource绑定(官方推荐)

放弃手动添加Items的逻辑,直接将Skill集合赋值给ListBox的DataSource属性,代码如下:

List<Skill> skills = new List<Skill>();
skills.Add(new Skill("1", "Long"));
skills.Add(new Skill("2", "Nhi"));

// 直接绑定数据源,不需要循环添加元素
listBox1.DataSource = skills;
// 仅需赋值一次即可
listBox1.ValueMember = "skillId";
listBox1.DisplayMember = "name";

配置完成后原有读取listBox1.SelectedValue的逻辑不需要修改,即可正常输出skillId的值。

方案2:保留手动加Items逻辑,直接读取SelectedItem

如果你不想修改现有添加元素的逻辑,可以放弃使用SelectedValue,直接将选中项转为Skill类型后读取属性,代码如下:

if (listBox1.SelectedItem is Skill selectedSkill)
{
    Console.WriteLine("value id listbox1:" + selectedSkill.skillId);
}

内容的提问来源于stack exchange,提问作者Đức Long

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 12:51:03