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

C#如何从绑定ChamberList的ListBox获取选中项并展示信息

解决ListBox选中项显示类名而非属性值的问题

嘿,我来帮你搞定这个问题!你现在遇到的情况是因为listBox1.SelectedItem返回的是一个Chamber对象,直接调用ToString()会使用.NET默认的实现,也就是返回类的完全限定名(就是你看到的hotelsysteem.chamber)。要获取具体的属性值,你需要先把选中的项转换成Chamber类型,再调用对应的 getter 方法。

修改button2_Click方法

把你的button2_Click方法改成这样,就能正确显示房间号和最大容纳人数了:

private void button2_Click(object sender, EventArgs e)
{
    // 先判断是否有选中项,避免空引用异常
    if (listBox1.SelectedItem != null)
    {
        // 将选中项转换为Chamber类型
        Chamber selectedChamber = (Chamber)listBox1.SelectedItem;
        // 调用getter方法获取属性值并赋值给标签
        label1.Text = selectedChamber.getChamberNumber().ToString();
        label2.Text = selectedChamber.getMaxGuests().ToString();
    }
    else
    {
        // 没有选中项时可以给提示或者清空标签
        label1.Text = "请选择一个房间";
        label2.Text = "";
    }
}

额外优化建议

1. 重写Chamber类的ToString()方法

如果你希望在其他场景下直接输出Chamber对象的信息更友好,可以在Chamber类里重写ToString()方法,这样后续直接调用对象的ToString()时会返回格式化后的内容:

class Chamber
{
    // 你的现有代码...

    public override string ToString()
    {
        return $"房间号: {chambernumber}, 最大容纳人数: {maxGuests}";
    }
}

2. 改用C#风格的属性(替代Java式getter/setter)

C#有专门的属性语法,比你现在用的Java风格getter/setter更符合语言习惯,代码也更简洁。比如把:

private int chambernumber;
public int getChamberNumber() { return chambernumber; }
public void setChamberNumber(int chambernum) { this.chambernumber = chambernum; }

改成:

public int ChamberNumber { get; set; }

之后使用时直接写selectedChamber.ChamberNumber即可,比调用方法更直观。

补充说明

你设置listBox1.DisplayMember = "chambernumber"的时候,实际上是.NET通过反射找到对应的getChamberNumber()方法来显示内容的。如果改用C#属性,把DisplayMember改成属性名"ChamberNumber"会更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:18:24