【问题标题】:How to pass through data from a child form into the parent form without refreshing the list如何在不刷新列表的情况下将数据从子表单传递到父表单
【发布时间】:2015-12-30 15:54:10
【问题描述】:

我正在做一个创建 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();

    }

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

【问题讨论】:

    标签: c# list


    【解决方案1】:

    你可能是关闭了表单,每次再次打开它时都重新创建它,由于这些订单在里面,显然之前的内容丢失了。

    解决方案:订单列表应该在主表单之外

    这是一个对你来说非常简单的模式,它非常原始,但它可以工作并且对于你的家庭作业应该足够/合理:一个静态类

    public static class MyModel
    {
        public static Order Order { get; set; }
    
        public static void NewOrder()
        {
            Order = new Order();
        }
    }
    
    public class Order
    {
        public Order()
        {
            Products = new List<Product>();
        }
    
        public List<Product> Products { get; set; }
    
        public void AddProduct(Product product)
        {
            Products.Add(product);
        }
    }
    
    public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
    

    以下是您如何在表单中使用它:

    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());
        }
    }
    

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

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

    祝你好运!

    【讨论】:

    • 非常感谢这对我帮助很大。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    相关资源
    最近更新 更多