Originariamente inviato da S0nic
ho qualche problema
non mi risulta.....
non so dove sbaglio
ho fatto così
codice:
Function RemoveIndex(ByVal programma As String, ByVal lista As ArrayList) As PWD
Dim mystruc As PWD
For i As Integer = 0 To lista.Count - 1
mystruc = CType(lista(i), PWD)
If mystruc.Programma = programma Then
lista.RemoveAt(i)
Exit For
End If
Next
End Function
Sub Remove()
Dim lista As ArrayList
Dim stream As FileStream = File.Open(Application.StartupPath & "\prova.bin", FileMode.Open)
Dim formatter As New BinaryFormatter()
lista = formatter.Deserialize(stream)
Dim mystruc As PWD = RemoveIndex(ComboBox1.Text, lista)
'TextBox1.Text = mystruc.Programma
'TextBox2.Text = mystruc.Username
'TextBox3.Text = mystruc.Password
'TextBox4.Text = mystruc.Note
stream.Close()
End Sub
Non capisco perchè tu abbia trasformato le Sub in Function ??
codice:
Dim mystruc As PWD = RemoveIndex(ComboBox1.Text, lista)
Chiaramente non va bene, era corretta la mia Sub:
codice:
Sub RemoveIndex(ByVal programma As String, ByVal lista As ArrayList)
Dim mystruc As PWD
For i As Integer = 0 To lista.Count - 1
mystruc = CType(lista(i), PWD)
If mystruc.Programma = programma Then
lista.RemoveAt(i)
Exit For
End If
Next
End Sub
e quindi:
codice:
Sub Remove()
Dim lista As ArrayList
Dim stream As FileStream = File.Open(Application.StartupPath & "\prova.bin", FileMode.Open)
Dim formatter As New BinaryFormatter()
lista = formatter.Deserialize(stream)
RemoveIndex(ComboBox1.Text, lista)
stream.Close()
'*********************************
'Devi serializzare ancora se vuoi salvare su File
'**********************************
End Sub
per la modifica invece questa va bene:
codice:
Sub ChangeIndex(ByVal programma As String, ByVal lista As ArrayList, ByVal password As String, ByVal userName As String, Optional ByVal note As String = "")
Dim mystruc As PWD
For i As Integer = 0 To lista.Count - 1
mystruc = CType(lista(i), PWD)
If mystruc.Programma = programma Then
lista.RemoveAt(i)
Dim myPWD As New PWD(programma, userName, password, note)
myList.Add(myPWD)
Exit For
End If
Next
End Sub
Ma ovviamente non puoi assegnare a una struttura il risultato di una Sub? che non ha nessun ritorno!
codice:
Dim mystruc As PWD = ChangeIndex(TextBox1.Text, lista, TextBox3.Text, TextBox2.Text)
Quindi il codice qui sopra non va bene, per cui come avevo scritto la sub era:
codice:
Sub ChangeIndex(ByVal programma As String, ByVal lista As ArrayList, ByVal password As String, ByVal userName As String, Optional ByVal note As String = "")
Dim mystruc As PWD
For i As Integer = 0 To lista.Count - 1
mystruc = CType(lista(i), PWD)
If mystruc.Programma = programma Then
lista.RemoveAt(i)
Dim myPWD As New PWD(programma, userName, password, note)
myList.Add(myPWD)
Exit For
End If
Next
End Sub
e utilizzandola:
codice:
Sub Change()
Dim lista As ArrayList
Dim stream As FileStream = File.Open(Application.StartupPath & "\prova.bin", FileMode.Open)
Dim formatter As New BinaryFormatter()
lista = formatter.Deserialize(stream)
ChangeIndex(TextBox1.Text, lista, TextBox3.Text, TextBox2.Text)
stream.Close()
'**************************
'Devi serializzare per salvare su File
'**************************
End Sub
Quindi in pratica:
-Deserializzazione dell'ArrayList
-Modifica o cancellazione di un elemento
-Serializzazione per salvare-
Attenzione che non vi è nessun controllo sui dupplicati, per cui se inserisci due programmi con lo stesso nome...sono dolori!!!!