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

C#中如何将Dialog窗体的选中数据传递到另一个主窗体

C# WinForm 窗体传值最优实现方案

该方案基于模式对话框返回值+实体类封装实现,完全符合WinForm官方设计规范,耦合度最低,易维护。


1. 第一步:封装车辆信息实体类

先把所有车辆关联字段封装为统一实体,避免零散传值,后续扩展字段仅需要修改实体即可:

public class Vehicle
{
    // 牌照
    public string LicensePlate { get; set; }
    // 车型
    public string CarModel { get; set; }
    // 生产年份
    public int ProductionYear { get; set; }
    // 其余车辆字段按需扩展即可
}

2. 第二步:改造待售车辆列表Dialog窗体

不需要暴露弹窗内部控件,仅对外暴露只读的选中车辆属性即可:

// 待售车辆列表弹窗窗体,假设类名为VehicleListDialog
public partial class VehicleListDialog : Form
{
    // 对外暴露的选中车辆属性,主窗体仅需要读取该属性即可拿到选中数据
    public Vehicle SelectedVehicle { get; private set; }

    public VehicleListDialog()
    {
        InitializeComponent();
        // 初始化时绑定待售车辆列表到DataGridView/ListView等列表控件
        dgvVehicleList.DataSource = 你的待售车辆列表数据源;
    }

    // 弹窗内确认选择按钮的点击事件
    private void btnConfirmSelect_Click(object sender, EventArgs e)
    {
        if(dgvVehicleList.SelectedRows.Count == 0)
        {
            MessageBox.Show("请先选择一台车辆");
            return;
        }
        // 从选中行拿到绑定的车辆实体赋值
        SelectedVehicle = dgvVehicleList.SelectedRows[0].DataBoundItem as Vehicle;
        // 设置DialogResult后窗体会自动关闭,不需要手动调用Close()
        this.DialogResult = DialogResult.OK;
    }
}

注意:弹窗的取消按钮不需要额外写逻辑,直接在控件属性面板将DialogResult属性设置为Cancel即可。


3. 第三步:主窗体调用弹窗并回填数据

主窗体按钮点击事件中实例化弹窗,判断返回值后直接读取属性回填即可:

// 主窗体(车辆销售页面)的弹出列表按钮点击事件
private void btnOpenVehicleList_Click(object sender, EventArgs e)
{
    // using块会自动释放弹窗资源,避免内存泄漏
    using(VehicleListDialog dialog = new VehicleListDialog())
    {
        // 以模式对话框形式打开弹窗
        if(dialog.ShowDialog() == DialogResult.OK)
        {
            // 直接读取弹窗返回的选中车辆实体,回填对应字段
            Vehicle selected = dialog.SelectedVehicle;
            txtLicensePlate.Text = selected.LicensePlate;
            txtCarModel.Text = selected.CarModel;
            txtProductionYear.Text = selected.ProductionYear.ToString();
            // 其余字段按需回填即可
        }
    }
}

方案优势

  • 完全解耦:弹窗不需要持有主窗体引用,也不需要定义委托/事件,两个窗体互不依赖内部实现
  • 符合官方设计规范,资源自动释放,无内存泄漏风险
  • 扩展性强,后续新增车辆字段仅需要修改Vehicle实体即可,不需要调整传值逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:06:03