如何将列表框项目保存到 my.settings

Posted

技术标签:

【中文标题】如何将列表框项目保存到 my.settings【英文标题】:How can I save listbox items to my.settings 【发布时间】:2016-02-29 07:27:10 【问题描述】:

简介

我已经查找了如何将列表框中的项目保存到 my.settings 有一段时间了,并且有很多不同的答案。我都试过了(说得有点过分了),但没有一个真正奏效。这可能是因为我做错了什么,因为解释不好或我的编程新手阶段。

所以我有一个表单,用户可以在其中设置一堆设置。当他关闭应用程序并重新打开它时,所有这些都将保持原样。文本框、复选框等工作正常,但由于某种原因,列表框比我预期的要难保存。

我的列表框

用户像这样将项目添加到列表框(在文本框tbpath1 中写入类似c:\test 的内容,按下按钮btnAdd1,文本将成为列表框中的项目lbchannel1

Private Sub btnAdd1_Click(sender As Object, e As EventArgs) Handles btnAdd1.Click
    Dim str As String = tbPath1.Text
    If str.Contains("\") Then
        lbchannel1.Items.AddRange(tbPath1.Text.Split(vbNewLine))
        tbext1_1.Text = (tbext1_1.Text)

我的尝试 (可能是十分之一的尝试)

所以这是我迄今为止的尝试之一。我希望这很容易。

My.Settings._lbchannel1.Clear()
For Each item In lbchannel1.Items
    My.Settings._lbchannel1.Add(item)
Next
My.Settings.Save()

在上面的尝试中,我收到错误'NullReferenceException was unhandled : Object reference not set to an object instance'

我猜这与项目不是字符串等有关,但我不确定该去哪里。有人可以用一种简单的解释方式来总结吗?

【问题讨论】:

将设置的类型更改为String.Collection。列表框有很多项目,您正试图将它们保存为单个字符串。 好的,谢谢。我想这更近了一步。 :) 【参考方案1】:

如果您没有在 IDE 中添加至少一项,VS 不会初始化您在“设置”中创建的集合,因为它看起来不像您正在使用它。

If My.Settings._lbchannel1 Is Nothing Then
    My.Settings._lbchannel1 = New System.Collections.Specialized.StringCollection()
End If

My.Settings._lbchannel1.Clear()
For Each item In lbchannel1.Items
    My.Settings._lbchannel1.Add(item)
Next
My.Settings.Save()

您也可以“欺骗”它为您初始化它。通过设置选项卡添加项目,保存项目,然后删除项目。

您还可以创建一个List(of String) 来存储数据。用 1-2 行代码自己序列化它,并将其用作列表框的 DataSource。这比将物品从一个集合穿梭到另一个集合并保持同步要简单。 This answer shows 一个序列化一个List(Of Class) 但原理是一样的。

【讨论】:

非常感谢您的回答,Plutonix。我马上要做一些测试。你能给我一个例子,说明我将如何在 form_load 中加载该设置吗?我猜是这样的 lbchannel1.Items = settings._lbChannel1 ,但它似乎不正确。 列表框项目和设置都是集合,但它们是不同的集合类型,因此您必须使用答案中所示的循环将项目从一个一次添加到其他。如果您自己序列化它,您可以跳过它的另一个步骤

以上是关于如何将列表框项目保存到 my.settings的主要内容,如果未能解决你的问题,请参考以下文章

使用 ListView 控件保存/加载 My.Settings - vb.net

如何从两个列表框保存文件c#

vb.net 保存列表框项目空行

从其他窗口将新项目添加到列表框

如何将选中的项目从checkedlistbox 插入SQL 数据库?

将内容保存到文件中,然后将其读回并显示