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

如何将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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:05:46