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

C# .NET技术问题:将新创建的巧克力订单对象传递回主窗体并显示

嘿,作为C#/.NET的新手,碰到这种跨窗体传对象的问题太正常啦!我给你整理了几个简单好上手的方法,帮你把Form1里创建的巧克力订单传到MainNavigation主窗体,还能在列表里显示出来~

方法一:公共属性+弹窗返回值(最适合新手的方案)

这个方法逻辑清晰,代码量少,完全适配你“在Form1创建订单后回到主窗体显示”的需求:

  1. 给Form1加个公共属性存订单
    在Form1的代码里,定义一个公共属性用来保存用户创建好的Chocolate对象:
// Form1.cs
public Chocolate NewChocolateOrder { get; private set; }
  1. Form1里创建订单并标记确认状态
    在用户点击“生成订单”的按钮事件里,根据用户选择的类型创建Chocolate对象,赋值给上面的属性,然后告诉主窗体“我完成创建啦”:
private void btnCreateOrder_Click(object sender, EventArgs e)
{
    // 这里根据你的界面控件获取用户选择的巧克力类型,比如下拉框
    string selectedType = cboChocolateType.SelectedItem.ToString();
    
    // 创建Chocolate对象,按需补充其他属性(比如价格、数量)
    NewChocolateOrder = new Chocolate 
    { 
        Type = selectedType,
        // Price = 10.99m,
        // Quantity = 1
    };
    
    // 设置弹窗的返回结果,告诉主窗体用户确认了这个订单
    this.DialogResult = DialogResult.OK;
    this.Close();
}
  1. 主窗体MainNavigation接收订单并显示
    在主窗体打开Form1的按钮事件里,用ShowDialog()打开弹窗,判断用户是否确认创建,然后把订单加到列表里:
// MainNavigation.cs
// 先定义一个存储订单的集合(推荐用List,比数组灵活)
private List<Chocolate> _chocolateOrders = new List<Chocolate>();

private void btnAddNewOrder_Click(object sender, EventArgs e)
{
    using (var createOrderForm = new Form1())
    {
        // 如果用户点击了确认(DialogResult.OK)
        if (createOrderForm.ShowDialog() == DialogResult.OK)
        {
            // 把新订单加到集合里
            _chocolateOrders.Add(createOrderForm.NewChocolateOrder);
            
            // 刷新列表控件(比如用ListBox的话)
            // 建议给Chocolate类重写ToString(),这样直接加对象就能显示友好内容
            listBoxOrders.Items.Add(createOrderForm.NewChocolateOrder);
        }
    }
}
小优化:给Chocolate类重写ToString()

为了让列表显示的内容更友好,给你的Chocolate类加个ToString()重写:

public class Chocolate
{
    public string Type { get; set; }
    // 其他属性比如Price、Quantity等
    
    public override string ToString()
    {
        // 自定义显示内容,比如"黑巧克力 - 单价:10.99元"
        return $"巧克力类型:{Type}";
    }
}
方法二:事件委托(适合实时传递,不用关闭Form1)

如果想让Form1保持打开,用户可以连续创建多个订单,主窗体实时显示,就用事件委托的方式:

  1. Form1里定义订单创建事件
// Form1.cs
// 定义一个事件,参数是创建好的Chocolate对象
public event EventHandler<Chocolate> ChocolateOrderCreated;

private void btnCreateOrder_Click(object sender, EventArgs e)
{
    string selectedType = cboChocolateType.SelectedItem.ToString();
    var newOrder = new Chocolate { Type = selectedType };
    
    // 触发事件,通知主窗体有新订单
    ChocolateOrderCreated?.Invoke(this, newOrder);
    
    // 这里可以不关闭Form1,让用户继续创建
}
  1. 主窗体订阅事件并接收订单
// MainNavigation.cs
private void btnOpenCreateForm_Click(object sender, EventArgs e)
{
    var createOrderForm = new Form1();
    // 订阅Form1的订单创建事件
    createOrderForm.ChocolateOrderCreated += OnChocolateOrderCreated;
    createOrderForm.Show();
}

// 事件处理方法,接收新订单并显示
private void OnChocolateOrderCreated(object sender, Chocolate e)
{
    _chocolateOrders.Add(e);
    listBoxOrders.Items.Add(e);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:06:27