Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584

    [vb.net]caricare lista con collection

    salve a tutti
    data la seguente classe:
    codice:
    Class cNote
        Dim mNota As String
        Dim mCodice As String
        Property Nota() As String
            Get
                Return mNota
            End Get
            Set(ByVal Value As String)
                mNota = Value
            End Set
        End Property
        Property codice() As String
            Get
                Return mCodice
            End Get
            Set(ByVal Value As String)
                mCodice = Value
            End Set
        End Property
    End Class
    premetto che sono principiante
    vorrei caricare un listview usando una collection: ho provato in questo modo
    codice:
            Dim OBJ As New cNote
            Dim Col As New Collection
    
            Dim i As Integer
            For i = 0 To 10
                OBJ.codice = i
                OBJ.Nota = i
                Col.Add(OBJ.Nota)
            Next
    
            For i = 0 To Col.Count - 1
                Me.ListBox1.Items.Add("????") 'carocare con le note
            Next
    
            'for each .....
            '
    come faccio a caricare i valori "NOTE"???
    ho creato un ciclo for, anche se con il for...each mi ci sono perso
    qualche suggerimento?
    vi ringrazio
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  2. #2
    codice:
    For i = 0 To Col.Count - 1
      Me.ListBox1.Items.Add(OBJ(i).Nota)
    Next
    oppure
    codice:
    For Each O As cNote In Col
      Me.ListBox1.Items.Add(O.Nota)
    Next

  3. #3
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584
    Originariamente inviato da Il Totem
    codice:
    For i = 0 To Col.Count - 1
      Me.ListBox1.Items.Add(OBJ(i).Nota)
    Next
    oppure
    codice:
    For Each O As cNote In Col
      Me.ListBox1.Items.Add(O.Nota)
    Next
    questa riga di codice:
    codice:
    For Each O As cNote In Col
    mi da errore:specified cast is not valid, segnalandomi COL in rosso
    sai da cosa puo' dipendere?

    graze
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  4. #4
    l'errore è qui

    Col.Add(OBJ.Nota)

    metti

    Col.Add(OBJ)

  5. #5
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584
    Originariamente inviato da KataKlism2002
    l'errore è qui

    Col.Add(OBJ.Nota)

    metti

    Col.Add(OBJ)
    perfetto non da più errore
    ma nella listbox compaiono 10 record uguali e cioè tutti: "10"
    dici che ad ogni ciclo dovrei riazzerare la classe?
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  6. #6
    ghghgh errore subdolo, classico ma interessante per chi è alle prime armi

    dipende dal fatto che nella collection stai inserendo 10 volte LO STESSO OGGETTO, passato per riferimento. quindi nei 10 cicli in cui popoli la collection, modificando il valore edll'oggetto lo stai modificando anche per i cicli precedenti...

    mi spiego meglio

    il ciclo in cui c'è l'errore è questo:

    codice:
            For i = 0 To 10
                OBJ.codice = i
                OBJ.Nota = i
                Col.Add(OBJ.Nota)
            Next
    al ciclo 0 obj.codice vale 0 e obj.nota anche, aggiungi l'oggetto quindi alla collection nella sua prma posizione

    al ciclo 1 obj.codice vale 1 e obj.nota vale 1, ma essendo lo stesso oggetto di prima stai modificando anche l'oggetto che avevi inserito nella collection al ciclo 0, quindi alla fine del ciclo 1 la collection ha 2 riferimenti di memoria che puntano allo stesso oggetto.
    al decimo ciclo hai 10 riferimenti di memoria che puntano allo stesso oggetto. ergo ti popola la lista di 10 righe uguali

    soluzione, crea un nuovo oggetto ad ogni ciclo in modo che venga dedicata una nuova area di memoria a quell'oggetto.

    codice:
            For i = 0 To 10
                OBJ = new cNote()
                OBJ.codice = i
                OBJ.Nota = i
                Col.Add(OBJ.Nota)
            Next

  7. #7
    codice:
            Dim OBJ As cNote
            Dim Col As New Collection
    
            Dim i As Integer
            For i = 0 To 10
                OBJ = New cNote
                OBJ.codice = i
                OBJ.Nota = i
                Col.Add(OBJ.Nota)
            Next
    'eccetera
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584
    grazie, mi serviva il vostro aiuto
    ora posso iniziare a fare l'analisi di come strutturare il programma

    a proposito
    facendo un po' di esperimenti ho visto che anche se nella classe dichiaro una variabile pubblica
    codice:
     Public a As String
    invece di una properties, riesco lo stesso a gestire lo stesso la collection
    visto che nella properties utlizzo anche una variabile private, quale è il motivo che si consiglia di usare la properties?

    grazie
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

  9. #9
    non basta un post per spiegare l'importanza di una property...

    in parole spicciole..

    se fai

    public CodiceFiscale as string

    in CodiceFiscale ci puoi mettere qualunque stringa ti pare... non rispettando le regole del codicefiscale (16 caratteri composti in un certo omdo)

    facendo una property obblighi chi usufruisce edlla tua classe a rispettare tali regole... i nquesto modo:

    codice:
            private _CodiceFiscale as string
    
        public Property CodiceFiscale() As String
            Get
                Return _CodiceFiscale 
            End Get
            Set(ByVal Value As String)
                if (IsCodiceFiscaleValido(value) = true) Then
                      _CodiceFiscale = value
                else
                     throw new Exception("Codice Fiscale non valido!")
                end if
            End Set
        End Property
    ovviamente IsCodiceFiscaleValido è una funzione booleana che fa i controlli necessari sulla stringa che le si passa.

    E' solo uno dei tanti esempi, spero renda l'ieda dell'importanza delle proprietà

  10. #10
    Utente di HTML.it L'avatar di Kahm
    Registrato dal
    Dec 2004
    residenza
    Rome
    Messaggi
    3,584
    vabbeh, questo dei codice fiscali è una possibilità
    attualmente non mi serve nessun tipo di controllo in quanto è un campo note

    forse se posti qualche altro suggerimento oltre ai controlli potresti essere chiarito meglio _
    NN vi diro mai chi sono in realta,
    tutti i miei 3D sono orfani, non insistete per farmi rispondere ai 3D aperti da me

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.