2015-12-30 10 views
0

Я занимаюсь школьным проектом при создании POS-системы, и мне нужно пройти через один и тот же список заказов в разных формах. каждый раз, когда я возвращаюсь в главное меню, список обновляется, хотя мне все еще нужны данные, чтобы предотвратить это?Как передать данные из дочерней формы в родительскую форму без обновления списка

public partial class Main : Form 
{ 

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

     this.order = order; 

    } 

это начало кода для главного меню

И это код для добавления элементов из thelistbox к списку

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

    } 

Спасибо заранее за help.Please сообщите мне, если что-то еще не так с кодом тоже. еще раз спасибо за помощь

ответ

0

Возможно, вы закрываете форму и воссоздаете ее каждый раз, когда вы ее открываете снова, и поскольку эти заказы находятся внутри нее, очевидно, что предыдущий контент теряется.

Решение: что список заказов должны быть вне основной формой

Вот очень простой шаблон для вас, это действительно примитивно, но это работает и должно быть достаточно/правдоподобно для домашней работы: статический класс

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 (контроллер вида модели) или любой другой узор по базе данных позади, но мало смысла выкачать такой дизайн для вашего вопроса. Однако вы можете/должны взглянуть на то, что представляют собой эти понятия.

Удачи вам!

+0

Большое вам спасибо, это очень помогло мне. Thx снова !! – Revo

Смежные вопросы