2016-02-29 41 views
0

介紹我如何保存列表框項目my.settings

我已經擡起頭來如何保存在一個列表框中my.settings的項目有一段時間了,有這麼多不同的答案。我嘗試過所有的(有點過分說),但沒有一個真的有效。這可能是因爲我做錯了一些錯誤的解釋,或者是我的新手入門階段。

所以我有一個表單,用戶可以設置一堆的設置。當他關閉應用程序並重新打開應用程序時,他們都將保持原來的狀態。文本框,複選框等工作正常,但由於某種原因,Listbox比我期望保存更難。

我的列表框

用戶添加項目到這樣的列表框(寫入類似c:\test在一個文本框tbpath1,按下一個按鈕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) 

我嘗試(大概十分之一的嘗試)

所以這是我的嘗試之一至今。我希望這很容易。

enter image description here

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'

我猜它是與不是一個字符串等項目,但我不知道該去哪裏。有人能以簡單的解釋方式把它包裝起來嗎?

+0

更改鍵入設置爲'String.Collection'。列表框中有很多項目,您正嘗試將它們保存爲單個字符串。 – Plutonix

+0

好的,謝謝。我想這更近了一步。 :) – MadsTheMan

回答

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行代碼自己對其進行序列化,並將其用作列表框的數據源。它比將物品從一個物品穿梭到另一個物品並保持同步更簡單。 This answer shows一個序列化List(Of Class)但原理是一樣的。

+0

非常感謝您的回答,Plutonix。我會馬上做一些測試。你能否給我一個我如何在form_load中加載這個設置的例子?我猜這樣的'lbchannel1.Items = settings._lbChannel1',但它似乎不正確。 – MadsTheMan

+1

列表框項目和設置都是集合,但是它們是不同的集合類型,因此您必須使用如答案中所示的循環來逐個添加項目。如果您自己序列化,可以跳過另一步 – Plutonix

+0

謝謝!我得到了它的工作。 :) – MadsTheMan