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
相关产品推荐
相关产品推荐

