避免使用数据初始化列表

时间:2017-09-08 21:59:42

标签: c# forms list

所以,我有两种形式。 form1有一个用于打开form2的按钮。在form2中,我有一个元素列表,我填充了我在form2中创建的元素。我的问题是,当我关闭我的form2并重新打开它时,我的列表是空的。我知道这是因为我再次初始化我的列表(ListaComida = new List<Comida>();),所以我删除了我的数据,但我没有看到如何解决这个问题。

我的代码

Form1中

public partial class Form1 : Form

{

    public Form1()
    {
        InitializeComponent();
}


    private void addDia_Click(object sender, EventArgs e)
    {

        string dia = (DateTime.Today.ToString("dd/MM/yyyy"));
        TabPage myTabPage = new TabPage(dia);
        tabControl1.TabPages.Add(myTabPage);
    }

    private void AddComida_Click(object sender, EventArgs e)
    {
        FormAddComida addComida = new FormAddComida();
        DialogResult resultaod = addComida.ShowDialog();
    }
}

窗体2

public partial class FormAddComida : Form
    {
        public List<Comida> ListaComida;

        public FormAddComida()
        {
            InitializeComponent();
            ListaComida = new List<Comida>();

        }

        private void addComidaAdicionar_Click(object sender, EventArgs e)
        {
            Comida comidaAdicionada = new Comida(tbNome.Text,
                Convert.ToInt32(tbCalorias.Text),
                Convert.ToInt32(tbHidratos.Text),
                Convert.ToInt32(tbProteinas.Text),
                Convert.ToInt32(tbGorduras.Text)
                );

            ListaComida.Add(comidaAdicionada);
            RefreshListaComida();

        }

        private void RefreshListaComida()
        {

            lbListaComida.Items.Clear();
            lbListaComida.Items.AddRange(ListaComida.ToArray());

        }

        private void AddComidaCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

    }

1 个答案:

答案 0 :(得分:2)

您可以使用MemoryCache,即使您关闭表单,列表也会保留在内存中,您可以通过密钥进行检索。但是如果你需要永久保存这些数据(或长时间运行应用程序),我建议你存储在数据库中。

    using System.Runtime.Caching;

    private ObjectCache cache = MemoryCache.Default;

    public class Food
    {
        public string Name { get; set; }
        public double Price { get; set; }
    }

    public void AddFood()
    {
        FoodList.Add(new Food { Name = "Pizza", Price = 10 });
        FoodList.Add(new Food { Name = "Fries", Price = 5 });

        cache.Add("UserCacheFood", FoodList, DateTimeOffset.MaxValue);
    }

    public List<Food> ReturnListFromCache()
    {
        return (List<Food>)cache.Get("UserCacheFood");
    }

    private void button1_Click(object sender, EventArgs e)
    {
        AddFood();
        var result = ReturnListFromCache();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        var ret2 = ReturnListFromCache();
    }