C# 如何在运行时将项目添加到列表框';s items集合,以便与设计时模式类似,它可以永久保留

C# 如何在运行时将项目添加到列表框';s items集合,以便与设计时模式类似,它可以永久保留,c#,winforms,combobox,listbox,runtime,C#,Winforms,Combobox,Listbox,Runtime,在winform应用程序中,将项目添加到列表框的项目集合时,这些项目将持续存在,并在应用程序启动时可用,但在运行时添加的项目不会在下次启动应用程序时持续存在 如何在运行时创建相同的设计时行为,以便在不使用任何类型的数据绑定或序列化的情况下永久保存控件项集合中的项 谢谢一种方法是将列表框项目提交到您的properties.settings中,这样当您加载应用程序时,它将拥有数据。您必须右键单击要保存数据的项目,然后单击“属性”窗口中的“设置”选项卡。在其中,您将能够添加每个项目。从这里开始,您需要

在winform应用程序中,将项目添加到列表框的项目集合时,这些项目将持续存在,并在应用程序启动时可用,但在运行时添加的项目不会在下次启动应用程序时持续存在

如何在运行时创建相同的设计时行为,以便在不使用任何类型的数据绑定或序列化的情况下永久保存控件项集合中的项


谢谢

一种方法是将列表框项目提交到您的properties.settings中,这样当您加载应用程序时,它将拥有数据。您必须右键单击要保存数据的项目,然后单击“属性”窗口中的“设置”选项卡。在其中,您将能够添加每个项目。从这里开始,您需要做的就是:

Properties.Settings.Default.myListboxItem = "Some new value";
Properties.Settings.Default.Save();
这段代码将更新您创建的设置值,调用Save()非常重要,因为这是提交更改的原因,所以无论何时修改设置中的任何值,最后都要调用Save()

然后在初始加载或表单创建时,您可以执行以下操作:

myListBox.Items.Add(Properties.Settings.Default.myListboxItem);
// Repeat as needed

一种方法是创建一个文本文件,程序在启动时读取该文件以将数据加载到列表框中,另一种方法是在向列表框添加内容时保存到该文件中

加载最好在构造函数中完成:

class MyClass : Form
{
    public MyClass()
    {
        if (File.Exists("ListBoxItems.txt"))
        {
            using (StreamReader sr = new StreamReader("ListBoxItems.txt"))
            {
                while (sr.Peek() != -1)
                {
                    myListBox.Items.Add(sr.ReadLine());
                }
            }
        }
    }
    //Other class functions here
}
然后,当您从应用程序中向列表框添加项目时,假设您使用了一个文本框和一个按钮,该按钮将文本框中的文本添加到列表框中,请执行以下操作:

public void AddToListBoxButton(object sender, EventArgs e)
{
    myListBox.Items.Add(myTextBox.Text);
    using (StreamWriter sw = new StreamWriter("ListBoxItems.txt",true))
    {
        sw.WriteLine(myTextBox.txt);
    }
}

如果加载表单时该文件不存在,则不会出现任何错误,并且当您添加到列表框时,它将为您创建该文件。所有代码都经过测试并正常工作。

您能解释一下为什么不想使用序列化吗?当您在设计时这样做时,这些项会保存在项目文件(.csproj)中。当您在运行时动态添加它们时,它们存储在内存中,您必须将它们保存在某个位置(数据库、文件等),并在下次运行应用程序时将其加载回。您可以保留到数据库,使用属性。设置,您可以保存到xml文件、txt文件等。。设计时设置的许多方法实际上都在表单的“Designer.cs”文件中,而不是“.csproj”文件中我的主要目标是避免与文件系统或任何类型的数据库进行任何交互,主要是避免任何权限问题,并避免将数据持久化到数据库的开销和复杂性。我能够通过属性方法实现我所期望的。因为我需要处理列表,所以我将设置类型从string更改为CollectionString,并且我能够向列表中添加或删除项目,并使它们保持不变。谢谢你的回答,谢谢你的回复。很好的解决方案,但项目属性对我来说效果更好。