2014-07-01 98 views
2

在我的表單上我有一個菜單「文件保存」。當我點擊保存時,我想保存特定的設置,以便在表單關閉並重新打開時進行恢復。我已經成功地完成了文本框中的文本和複選框的選中狀態,但是我試圖循環訪問列表框中的項目時失敗了。請參閱下面的我已經試過......VB 2013持久性用戶設置

當我點擊保存:

Private Sub SaveToolStripMenuItem_Click(sender As Object, e As EventArgs) 
     Handles SaveToolStripMenuItem.Click 
For Each i In ListBox1.Items() 
    My.Settings.ListBox1.Add(i) 
Next 
My.Settings.Save() 
End Sub 

當我的形式加載:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
     Handles Me.Load 
For Each i In My.Settings.ListBox1() 
    ListBox1.Items.Add(i) 
Next 
End Sub 

我只用VB三天,如果我錯過了一些簡單的哈哈,非常抱歉!謝謝你的幫助!!!

+0

是什麼類型'My.Settings.ListBox1'?一個字符串集合?它如何失敗?你可能想在開發一些壞習慣之前打開Option Strict。 – Plutonix

+0

類型:System.Collections.Specialized.StringCollection – user3688529

+0

如何開啓該選項? – user3688529

回答

0

在設置中有一個小毛病與StringCollection。如果你不用一個假變量來播種它,那麼它從Nothing開始,你不能添加到Nothing。表單中的負載補充一點:

' if the collection has not been initialized, do so 
If My.Settings.ListBox1 Is Nothing Then 
    My.Settings.ListBox1= New System.Collections.Specialized.StringCollection 
End If 

' now it is safe to use: load strings from Setting -> form listbox 
For Each s As String In My.Settings.ListBox1() 
    ListBox1.Items.Add(s) 
Next 

它運行的第一次,也有可能沒有保存的設置,所以我們要爲他們創造容器,基本上是這樣。


選項嚴格可以按文件執行,在頂部添加此:

Option Strict On 

或者項目爲:Project => Properties => Compile:Option Strict爲可能正確的(我有2012)。您也可以將其設置爲永久選項(建議)。

除此之外,這將阻止您從空中採集變量並在未聲明類型的情況下使用它們(其中將導致錯誤)。例如:

For Each i In My.Settings.ListBox1() 

成爲

For Each s As String In My.Settings.ListBox1() ' tell the compiler the Type 
+0

謝謝!到達那裏。我已經把你的第一個if語句放在表單加載中,但是不應該將第二個for循環放在菜單保存下而不是表單加載?無論如何,這是我所做的,所以我點擊保存時,將列表框項目添加到我的設置。我試圖顛倒你的for循環(我認爲我做了不正確的反正)來添加到表單加載從項目設置並返回到列表框。這是我在表單加載嘗試:對於我作爲整數= 0到My.Settings.ListBox1.Count - 1 ListBox1.Items.Add(My.Settings.ListBox1.Item(i)) Next – user3688529

+0

編輯道歉的評論中的代碼。此外,我只是直覺,而我正在努力學習基礎知識。 – user3688529

+0

您看到了(太)早期草案回覆,您的原始迴圈是好的,答案中的代碼與草稿不同。但是不,「If ... Is Nothing」在形式加載中進行。第二種形式的加載循環與「As String」除外 - 是一樣的 - 沒問題。 (因爲你在UI控件後命名了Settings列表,所以它**令人困惑) – Plutonix