如何将列表框项目保存到 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