表单关闭后,checkedlistbox中的项目被删除

时间:2015-02-24 08:09:26

标签: c# winforms

我有一个简单的c#winform,我试图为它添加一个字符串。 例如

checklistbox1.Items.Add("string");

问题是,在我关闭表单并再次运行程序后,我添加的字符串将从checklistbox中删除,我必须再次输入。

3 个答案:

答案 0 :(得分:0)

关闭表单时,也会删除与其关联的成员。如果您希望保存它,您需要使用一种为您保存数据的方法,例如XML,txt doc,甚至数据库,具体取决于您要保留的信息的生命周期。

如果仅在程序运行时需要它,您可能会考虑将信息存储在主窗体中的成员中,而不仅仅是具有清单框的表单。

答案 1 :(得分:0)

向表单添加公共List属性。 为您的表单和第二个ctor代码创建第二个ctor 写:

public YourForm(List<string>() strings)
{
     foreach(var item in strings)
     {
        checklistbox1.Items.Add(item);
     }
}

答案 2 :(得分:0)

关闭时无需卸载表单。让父表单 - 我假设这是从另一个表单启动 - 改为卸载/处理所有子表单。诀窍是让用户看到你正在关闭表单。假设包含清单的表单是Form2,从父表单加载Form2的函数将如下所示:

    Form2 _form2 = null;
    private void button1_Click(object sender, EventArgs e)
    {
        if (_form2 == null)
        {
            _form2 = new Form2();
        }

        _form2.Show();
    }

在Form2中,像这样处理Closing事件:         private void Form2_FormClosing(object sender,FormClosingEventArgs e)         {             e.Cancel = true;             隐藏();         }

最后,在父窗体Closing事件中,您可以处置Form2

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (_form2 != null)
        {
            _form2.Dispose();
            _form2 = null;
        }
    }

如果需要为Form2的所有实例使用相同的值集,则可以使用Singleton模式。那是另一个讨论:)