2015-04-16 32 views
1

我能寫出完美的文件......但是我無法從文件中讀取和讀出的數據插入到一個列表框。將數據載入列表框

Public myData As New MySettings 
Public saveFile As String = ("mysettings.ini") 


'SAVE INFO TO SETTINGS FILE 

    Dim fs As Stream = New FileStream(saveFile, FileMode.Create) 
    Dim bf As BinaryFormatter = New BinaryFormatter() 

    For l_index As Integer = 0 To ListBox1.Items.Count - 1 
     Dim l_text As String = CStr(ListBox1.Items(l_index)) 
     bf.Serialize(fs, l_text) 
    Next 


    fs.Close() 
    Return 

這是我有麻煩的部分...

'LOAD INFO FROM SETTINGS FILE 

    Dim fs As Stream = New FileStream(saveFile, FileMode.Open) 
    Dim bf As BinaryFormatter = New BinaryFormatter() 

    For l_index As Integer = 0 To saveFile.Count - 1 
     Dim l_text As String = CStr(saveFile(l_index)) 
     'myData = CType(bf.Deserialize(fs), CType(myData)) 
     ListBox1.Items.Add(myData) 
    Next 

    fs.Close() 
    Return 

任何幫助都將不勝感激,在正確的方向,甚至一個點。

在此先感謝!

+0

如果答案幫助,請給予好評/點擊勾選所以這是從未答覆的名單中刪除 – Plutonix

回答

0

列表框ObjectCollection(產品)沒有標記爲可序列化,所以你不能序列化整個事情一次。您可能遇到過這種情況,並使用循環來序列化每個項目。循環確實出現了序列化的每個項目,但我不知道你怎麼能在一個循環中反序列化 - 你不會知道有多少項目有,也不會對串行。同時

而不是一個項目,你可以在ListBox項目複製到一個數組和序列化整個事情:

Dim ary(lb.Items.Count - 1) As Object 
lb.Items.CopyTo(ary, 0) 

' OpenOrCreate! 
Using fs As New FileStream("C:\Temp\lbitems.bin", FileMode.OpenOrCreate) 
    Dim bf As New BinaryFormatter 
    bf.Serialize(fs, ary) 

End Using  ' close and dispose of stream 

反序列化則剛剛相反:

Using fs As New FileStream("C:\Temp\lbitems.bin", FileMode.Open) 
    Dim bf As New BinaryFormatter 
    Dim myAry = bf.Deserialize(fs) 

    lb.Items.Clear() 
    lb.Items.Add(myAry) 

End Using 

可以使它使用List(of String)更簡單一些,並將其指定爲DataSource。

Private myLBItems As New List(Of String) 
    ... 
' fake items to add 
myLBItems.Add("Foo") 
myLBItems.Add("Bar") 
myLBItems.Add("Option") 
myLBItems.Add("Strict") 

lb.DataSource = myLBItems 

使用列表作爲數據源,你沒有從這裏複製項目有 - 無論是在列表會出現在列表框。序列化也很簡單:

bf.Serialize(fs, myLBItems) 

由於反序列化返回一個對象,你需要將它轉換(Option Strict):

myLBItems = CType(bf.Deserialize(fs), List(Of String)) 

注:這可能不是做你想要的所有東西。您的代碼將其轉換爲字符串後序列化ListBox中的內容。稍後,它看起來像要反序列化爲MySettings類型。

如果MySettings是像一個名稱和值對(或它們的集合),大概一半的數據和所有類型的信息將被丟失。