如何将子表单中的数据传递到父表单而不刷新列表

时间:2015-12-30 15:54:10

标签: c# list

我正在做一个创建POS系统的学校项目,我需要通过不同的表单传递相同的订单列表。问题是每次我返回主菜单,列表刷新虽然我仍然需要数据反正是为了防止这种情况发生?

    public partial class Main : Form
{

    List<string> order = new List<string>();
    public Main()
    {
        InitializeComponent();
    }
    public Main(List<string> order)
    {
        InitializeComponent();

        this.order = order;

    }

这是主菜单的开始代码

这是将列表框中的项目添加到列表

的代码
 private void confirmbtn_Click(object sender, EventArgs e)
    {
        order.AddRange(temp_order);
        if (pendinglist.Items.Count != 0)
        {
            MessageBox.Show("Your Items have been added! yay!", "That Sushi", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
            MessageBox.Show("No items was selected.", "That Sushi", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        pendinglist.Items.Clear();

    }

提前感谢您的帮助。如果代码有任何其他问题,请告诉我。再次感谢你的帮助

1 个答案:

答案 0 :(得分:0)

您可能正在关闭表单并在每次再次打开时重新创建表单,并且由于这些订单位于其中,显然以前的内容会丢失。

解决方案:订单列表应位于主窗体之外

这是一个非常简单的模式,它非常原始,但它的工作原理,应该足够/合理的功课:静态类

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void buttonNewOrder_Click(object sender, EventArgs e)
    {
        MyModel.NewOrder();
    }

    private void buttonAddProduct_Click(object sender, EventArgs e)
    {
        var product = new Product();
        product.Name = "PS4";
        product.Price = 1000000000.0m;

        MyModel.Order.AddProduct(product);
    }

    private void buttonShowProductsInOrder_Click(object sender, EventArgs e)
    {
        var order = MyModel.Order;
        var products = order.Products;
        var builder = new StringBuilder();
        foreach (var product in products)
        {
            var format = string.Format("Name: {0}, Price: {1}", product.Name, product.Price);
            builder.AppendLine(format);
        }
        MessageBox.Show(builder.ToString());
    }
}

以下是您从表单中使用它的方法:

    $invoices_object = $this->user->invoices();
    $invoices = [];

    foreach($invoices_object as $invoice) {
        array_push($invoices, $invoice->getStripeInvoice() );
    }
    return $invoices;

订单不会消失,并且可以通过多种形式访问。

显然这是一个非常糟糕的做法,大师将使用MVP(模型视图演示者),MVC(模型视图控制器)或后面的数据库中的任何模式,但没有必要为您的问题推出这样的设计。但是,您可以/应该看一下这些概念是什么。

祝你好运!