如何将AircraftDetails对象详情显示到TextBox?C# WinForm问题
解决WinForm中ListBox选中项无法显示AircraftDetails真实详情的问题
问题回顾
你正在开发一款飞机起飞测试的C# WinForm程序,这是你的第一个个人项目。目前有Main和FlightSetup两个窗体,以及包含属性、构造函数的AircraftDetails类。现在遇到的问题是:
- 在
addaircraftButton_Click方法里创建AircraftDetails对象并存储数据后,Main窗体的aircraftList(ListBox)只能显示机型名称 - 选中列表项时,
detailsList(TextBox)显示的是AircraftDetails类的默认属性值,不是对应实例的真实数据
你已经排查出问题出在aircraftList_SelectedIndexChanged方法里——你新建了空的AircraftDetails对象,没有调用之前创建并存储数据的实例。
解决方案
1. 让ListBox存储完整的AircraftDetails实例
首先,不要只把机型字符串添加到ListBox,直接把AircraftDetails对象加进去。同时重写AircraftDetails的ToString()方法,让ListBox显示机型名称:
public class AircraftDetails { // 你的属性示例 public string ModelName { get; set; } public double TakeoffWeight { get; set; } public int FuelRemaining { get; set; } // 构造函数 public AircraftDetails(string modelName, double takeoffWeight, int fuelRemaining) { ModelName = modelName; TakeoffWeight = takeoffWeight; FuelRemaining = fuelRemaining; } // 重写ToString,让ListBox显示机型 public override string ToString() { return ModelName; } }
然后在添加飞机的按钮事件里,直接把实例加入ListBox:
private void addaircraftButton_Click(object sender, EventArgs e) { // 从FlightSetup窗体或输入控件获取数据(根据你的实际代码调整) string model = flightSetupForm.txtModel.Text; double weight = double.Parse(flightSetupForm.txtWeight.Text); int fuel = int.Parse(flightSetupForm.txtFuel.Text); AircraftDetails newPlane = new AircraftDetails(model, weight, fuel); aircraftList.Items.Add(newPlane); }
2. 修改SelectedIndexChanged事件,获取选中的真实实例
不要在这个事件里新建空对象,直接从ListBox的SelectedItem里取出之前存的AircraftDetails实例,然后把属性拼接显示到TextBox:
private void aircraftList_SelectedIndexChanged(object sender, EventArgs e) { // 先判断有没有选中项,避免空引用错误 if (aircraftList.SelectedItem == null) return; AircraftDetails selectedPlane = aircraftList.SelectedItem as AircraftDetails; if (selectedPlane != null) { // 拼接详情,格式根据你的需求调整 detailsList.Text = $"机型: {selectedPlane.ModelName}\n" + "起飞重量: " + selectedPlane.TakeoffWeight + " kg\n" + "剩余燃油: " + selectedPlane.FuelRemaining + " L"; } }
3. 额外提醒
- 记得给输入框加验证逻辑,比如判断重量、燃油量是不是合法的数字,防止
double.Parse或者int.Parse报错 - 如果是从FlightSetup窗体传递数据,尽量直接传递AircraftDetails实例,不要拆分字段传递,避免数据遗漏
内容的提问来源于stack exchange,提问作者Miguel G.
相关产品推荐
相关产品推荐

