Newsgroup: it.comp.lang.visual-basic
Titolo: Chi mi aiuta???

Sto cercando in tutti i modi di risolvere questo problema che
mi affligge da parecchio.... :
Devo creare 2 listbox (list1 e list2) e dopo aver inserito
in una il nome e nell'altra il n° di tel. devo poter salvare
questi dati in un unico file.
Una volta salvato il lavoro deve essere possibile anche
aprire il file per rivisualizzare il suo contenuto nelle 2 listbox.......
Il mio scopo è creare una rubrica telefonica.....
Ve ne sarò grato se potreste aiutarmi.
Ciao e Grazie!

 Il mio scopo è creare una rubrica telefonica.....
Perché invece di due ListBox, no nusare una ListView?
Supponiamo che hai il seguente Form. Nella parte superiore, due TextBox
(txtNome e txtNumero) e due CommadButton (cmdAdd e cmdDel). Mentre il resto
del form è occupato da una ListView (lstPersone).
La proprietà Text dei due TextBox è inizialmente a vbNullString (campo
vuoto).
La proprietà View della ListView è su lswReport. Ci sono 2 ColumnHeader,
indicizzate 1 e 2, la cui proprietà Text è, rispettivamente, Nome e
Telefono. La proprietà Sorted è su True.
Se non ti piace, sta a te cambiare il disegno ^_^;;
Ora.. il problema è come organizzare la struttura dei dati. Il metodo più
semplice è creare una classe "persona" con le property nome e telefono
(questo perché le collection di VB non accettano gli UDP) e mettere le
diverse persone in una collection. In altre parole facciamo una collection
collPersone di oggetti persona. Ciascun oggetto persona avrà le due
proprietà nome e telefono.
Crea quindi un nuovo modulo di classe e chiamalo come ti pare. Inserisci
dentro a questo il seguente codice:
___________________________________________
Option Explicit
Private m_nome As String
Private m_telefono As String
Public Property Get Nome() As Variant
    Nome = m_nome
End Property
Public Property Let Nome(ByVal vNewValue As Variant)
    m_nome = vNewValue
End Property
Public Property Get Telefono() As Variant
    Telefono = m_telefono
End Property
Public Property Let Telefono(ByVal vNewValue As Variant)
    m_telefono = vNewValue
End Property
____________________________________________
Nella form, invece, inserisci il seguente codice:
____________________________________________
Option Explicit
Private Type FileHeader
     tipo As String * 4
     versione As String * 4
     size As Long
     Reserved1 As Long
     Reserved2 As Long
     Reserved3 As Long
     Reserved4 As Long
     sezioni As Long
End Type
Public collPersone As New Collection
Private Sub cmdAdd_Click()
    Dim Nome As String
    Dim Telefono As String
    Dim persona As New persona
    Nome = Trim(txtNome.Text)
    Telefono = Trim(txtNumero.Text)
    txtNome.Text = vbNullString
    txtNumero.Text = vbNullString
    If Nome = vbNullString Or Telefono = vbNullString Then
        MsgBox "Inserire tutti i paramentri correttamente", vbExclamation
        Exit Sub
    End If
    persona.Nome = Nome
    persona.Telefono = Telefono
    collPersone.Add persona
    salva
    listRefresh "n" & collPersone.Count
End Sub
Public Sub listRefresh(ultimo As String)
    Dim lstItem As New ListItem
    Dim conta As Long
    lstPersone.ListItems.Clear
    If collPersone.Count <> 0 Then
        For conta = 1 To collPersone.Count
            Set lstItem = lstPersone.ListItems.Add(, "n" & conta,
collPersone(conta).Nome)
            lstItem.SubItems(1) = collPersone(conta).Telefono
        Next
        lstPersone.ListItems(ultimo).Selected = True
        lstPersone.SetFocus
    End If
    If collPersone.Count = 0 Then
        cmdDel.Enabled = False
    Else
        cmdDel.Enabled = True
    End If
    Set lstItem = Nothing
End Sub
Private Sub cmdDel_Click()
    Dim keyPersona As String
    Dim indicePersona As Long
    keyPersona = lstPersone.SelectedItem.Key
    indicePersona = Val(Mid(keyPersona, 2))
    collPersone.Remove indicePersona
    salva
    If indicePersona = collPersone.Count + 1 Then indicePersona =
indicePersona - 1
    listRefresh "n" & indicePersona
End Sub
Public Sub salva()
    Dim file As Integer
    Dim temp As String * 255
    Dim oggetto As New persona
    Dim header As FileHeader
    If Len(Dir$(App.Path & "\persone.dat")) <> 0 Then Kill (App.Path &
"\persone.dat")
    file = FreeFile
    header.tipo = "PPPP"
    header.versione = "0000"
    header.sezioni = collPersone.Count
    Open App.Path & "\persone.dat" For Binary As #file
        Put #file, 1, header
        For Each oggetto In collPersone
            temp = oggetto.Nome
            Put #file, , temp
            temp = oggetto.Telefono
            Put #file, , temp
        Next
        header.size = LOF(file)
        Put #file, 1, header
    Close #file
    Set oggetto = Nothing
End Sub
Public Sub leggi()
    Dim file As Integer, conta As Integer
    Dim temp As String * 255
    Dim oggetto As New persona
    Dim header As FileHeader
    If Len(Dir$(App.Path & "\persone.dat")) = 0 Then Exit Sub
    file = FreeFile
    Open App.Path & "\persone.dat" For Binary As #file
        Get #file, 1, header
        If header.size <> LOF(file) Then
            MsgBox "L'rchivio è danneggiato", vbCritical
            Close #file
            Kill (App.Path & "\persone.dat")
            Exit Sub
        End If
        If header.tipo <> "PPPP" Then
            MsgBox "Formato di file sconosciuto", vbCritical
            Close #file
            Kill (App.Path & "\persone.dat")
            Exit Sub
        End If
        For conta = 1 To header.sezioni
            Get #file, , temp
            oggetto.Nome = Trim(temp)
            Get #file, , temp
            oggetto.Telefono = Trim(temp)
            collPersone.Add oggetto
            Set oggetto = Nothing
            Set oggetto = New persona
        Next
    Close #file
End Sub
Private Sub Form_Activate()
    listRefresh "n1"
End Sub
Private Sub Form_Load()
    Caption = "Rubrica telefonica"
    leggi
End Sub
_____________________________________________
Bene, rubrica telefonica finita (almeno nelle funzioni di base).
Bye