Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

di il
10 risposte

Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

Ciao a tutti...

eccomi di nuovo a presentare richiesta di aiuto... e questa volta garantisco che non è una sfuggita di lettura di label!...

Sto praticamente realizzando un programma che mi deve contenere una serie di dati attraverso delle ListView.
Durante il debub con l'inserimento di alcuni dati casuali, o meglio, dati inventati ai fini di esempi, mi succede questa cosa!... si interrompe il debug e mi si apre questa finestra segnalandomi questo errore...

InvalidArgument=Valore di '1' non valido per 'index'.
Nome parametro: index

Onestamente non capisco da cosa possa dipendere...
Allego screen in quanto, una immagine, vale più di mille parole...

erroreListView.png
erroreListView.png

E questa è la schermata ove raffiguro la presenza di alcuni dati di fantasia... la prima stringa inserita... tutto ok... la seconda... tutto ok... clicco per inserire la terza e va bene... poi clicco per inserire la quarta riga, si blocca e mi spunta fuori l'errore...

erroreListView2.png
erroreListView2.png

Ho fatto delle ricerche sul web ma non sono riuscito a trovare info al riguardo... a parte questo link... ma la cosa non è stata chiarita...
http://forum.html.it/forum/showthread/t-1007543.htm

Sapete darmi qualche suggerimento???

Grazie....

10 Risposte

  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    È un po' difficile dire dove sta l'errore ... Si fa prima se fai scaricare il progetto da provare...
  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    e444 ha scritto:


    Onestamente non capisco da cosa possa dipendere...
    Allego screen in quanto, una immagine, vale più di mille parole...
    Lo è se l'immagine è leggibile!
    In questo caso la leggibilità fa pena.
    Ma anche fosse leggibile, non ce ne facciamo un granché, perché bisogna analizzare il flusso di dati elaborati, dati che hai solo tu e di cui noi non abbiamo alcuna conoscenza.

    e444 ha scritto:


    Sapete darmi qualche suggerimento???
    Certo: entrare in DEBUG e, durante il flusso di dati, leggere il valore delle variabili e/o dei parametri incriminati e controllare se corrispondono a quello che ci si aspetta.

    Trovarsi un Index = 1 dopo aver già inserito diversi elementi ovviamente è un errore. Questo è il primo indizio.
    Perché è 1 ? Da dove arriva quel valore? Da una sorgente di dati esterna? Dal tuo codice? etc...

  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    oregon ha scritto:


    È un po' difficile dire dove sta l'errore ... Si fa prima se fai scaricare il progetto da provare...
    Ciao, hai un MP.

    gibra ha scritto:


    Lo è se l'immagine è leggibile!
    In questo caso la leggibilità fa pena.
    Ma anche fosse leggibile, non ce ne facciamo un granché, perché bisogna analizzare il flusso di dati elaborati, dati che hai solo tu e di cui noi non abbiamo alcuna conoscenza.
    Hemm... si...hai ragione... allego l'immagine come file a parte...
    Allora... una cosa alla volta...
    "analizzare il flusso di dati elaborati"
    Che vuoi dire?
    se intendi uno scambio di dati tra il programma e l'utente... non ce ne sta... è un semplice compilatore della listview ottenuto attraverso form contenenti textbox e maskedtextbox... di cosa hai bisogno di preciso? allego pure il codice di dove si genera l'errore e non c'è intromissione di dati esterni.

    gibra ha scritto:


    Certo: entrare in DEBUG e, durante il flusso di dati, leggere il valore delle variabili e/o dei parametri incriminati e controllare se corrispondono a quello che ci si aspetta.

    Trovarsi un Index = 1 dopo aver già inserito diversi elementi ovviamente è un errore. Questo è il primo indizio.
    Perché è 1 ? Da dove arriva quel valore? Da una sorgente di dati esterna? Dal tuo codice? etc...

    anche qui... che intendi per leggere il valore delle variabili? in base a quanto sto imparando mi aspetto che con l'evento click sul pulsante "Inserisci" lui va a scrivere i dati contenuti nelle textbox all'interno della listview ed, ovviamente, li salva in un apposito file richiamato in lettura.
    Non ci sono intromissioni di dati esterni.
    Lo so che trovarmi un "Index = 1" dopo aver inserito diversi elementi è un errore... il problema è che non riesco a capire da cosa è dipeso, per questo son qui a chiedere aiuto a voi... perche un conto è che l'errore me lo fa subito... ma non ha senso che me lo fa a "random"... anche perche, nel cercare di capire, ho fatto varie prove... per andare ad esclusione... ad esempio... ho escluso che l'errore è generato dal 4° inserimento... ecco immagine di esempio....

    erroreListView3.png
    erroreListView3.png

    ho inserito tutti "PIPPO" e poi "PIPPOPIPPO" e non mi ha dato nessun problema MA!... appena ho cercato di inserire "PIPPO123" ecco che si è ripresentato il problema!...
    Siccome mi segnala che "Index = 1"... ho pure fatto una prova... ho reso la stringa interessata, quella che diventa gialla, in modalità commento... quindi diventa verde.
    Ora... l'inserimento è sempre corretto.... ma mi si incasina il salvataggio dei dati... perche il problema è nei SubItems... ma la cosa interessante è che quando mi è spuntato di nuovo l'errore, stavolta mi ha indicato la seconda stringa dei subitems... e diceva l'Index = 2.
    Quindi... mi vien da capire che quell'1 che pesca è il numero del SubItems.... ma sono costretto a metterlo!... altrimenti non mi salva correttamente i SubItems nel file per richiamarli una volta riaperto il programma... insomma... mi sembra un po in cane che si morde la coda.

    Questo è il codice della pagina.
    
    Imports System.IO
    
    Public Class AggiungiWeb
    
        Dim PatchWeb As String = My.Computer.FileSystem.CurrentDirectory + "\web.dll"
    
    
        Private Sub PulsanteAggiungiWeb(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            If FormPrincipale.ListView2.Items.Count = (0) Then
                FormPrincipale.ListView2.Items.Add(tbSitoWeb.Text)
                FormPrincipale.ListView2.Items(0).SubItems.Add(tbNiknameSitoWeb.Text)
                FormPrincipale.ListView2.Items(0).SubItems.Add(tbPasswordSitoWeb.Text)
            Else
                FormPrincipale.ListView2.Items.Add(tbSitoWeb.Text)
                FormPrincipale.ListView2.Items(FormPrincipale.ListView2.Items.Count - 1).SubItems.Add(tbNiknameSitoWeb.Text)
                FormPrincipale.ListView2.Items(FormPrincipale.ListView2.Items.Count - 1).SubItems.Add(tbPasswordSitoWeb.Text)
            End If
            If File.Exists(PatchWeb) = False Then
    
                Using crea As New StreamWriter(PatchWeb)
                    For c = 0 To FormPrincipale.ListView2.Items.Count - 1
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).Text)
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).SubItems(1).Text)
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).SubItems(2).Text)
                    Next
                    crea.Close()
                End Using
            Else
                Using crea As New StreamWriter(PatchWeb)
                    For c = 0 To FormPrincipale.ListView2.Items.Count - 1
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).Text)
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).SubItems(1).Text) '*******************************************************
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).SubItems(2).Text)
                    Next
                    crea.Close()
                End Using
            End If
            MsgBox("Dati salvati correttamente")
            Me.Close()
        End Sub
    End Class
    
    Ho inserito gli asterischi nella stringa di codice incriminata.
    Questo è praticamente il codice del Form "Inserimento dati Web" che mostra i textbox per inserire i dati nella listview2 situata nel FormPrincipale del programma.
    Allegati:
    19330_db939dda75e070cbdcbe73cee349ba3a.rar
    19330_db939dda75e070cbdcbe73cee349ba3a.rar
  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    Oregon hai posta...

    Allora... da dei controlli e innumerevoli prove... ho capito che il problema che genera questo errore è dato dall'ordinamento alfabetico della listview.
    Da VisualStudio nelle proprietà del Form dov'è inserita la LisView, era impostata la proprietà "Sorting"... quindi, finchè l'inserimento dei dati cadeva in cascata ai dati esistenti andava tutto bene.... ma se si inseriva un dato che andava a collocarsi tra dei dati esistenti... ecco spuntare il problema.
    Ho impostato la proprietà su "None"... ma ho la necessità di avere l'elenco in ordine alfabetico...
    Come potrei risolvere la cosa?
  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    Semplice, imposti il sort dopo il caricamento degli elementi.
  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    Se intendi nell'evento Load del form dove sta la listview, ciò provato.... ma in qualsiasi punto del form vai a mettere la stringa di codice del sort, sia all'evento Load, o in qualsiasi altro evento... lui non ne tiene conto!... e lo considera come se tale evento fosse sempre abbinato all'evento click dell'inserimento dei dati... e va sempre in crash!...
    Oggi sono stato un po incasinato... Oregon mi ha suggerito un metodo... (e lo ringrazio di cuore per il suo aiuto...) ma devo capire ancora bene cosa devo fare perche non mi è stato molto chiaro...

    ...sapete... se capisco... imparo...
  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    Non comprendo perché parli di eventi, che non c'entrano nulla, in questo caso.
    Spiega cosa non capisci in questa frase:
    Semplice, imposti il sort dopo il caricamento degli elementi.
  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    gibra ha scritto:


    Non comprendo perché parli di eventi, che non c'entrano nulla, in questo caso.
    Spiega cosa non capisci in questa frase:
    Semplice, imposti il sort dopo il caricamento degli elementi.
    un passetto per volta...

    allora...

    per "elementi" cosa intendi?...
    gli elementi della listview (quindi gli items) o gli elementi del form che contiene la listview?

    Perche ho provato ad inserire il comando del sorting DOPO il caricamento degli elementi... ma va in crash lo stesso!...

    Ho provato a fare questa variante... visto che le avevo provate tutte... in attesa di capire altre cose... e così... sembra funzionare bene senza darmi più l'errore e mettendo tutto in ordine alfabetico...
    
    Private Sub PulsanteAggiungiWeb(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            If FormPrincipale.ListView2.Items.Count = (0) Then
                FormPrincipale.ListView2.Sorting = SortOrder.None
                FormPrincipale.ListView2.Items.Add(tbSitoWeb.Text)
                FormPrincipale.ListView2.Items(0).SubItems.Add(tbNiknameSitoWeb.Text)
                FormPrincipale.ListView2.Items(0).SubItems.Add(tbPasswordSitoWeb.Text)
                FormPrincipale.ListView2.Sorting = SortOrder.Ascending
            Else
                FormPrincipale.ListView2.Sorting = SortOrder.None
                FormPrincipale.ListView2.Items.Add(tbSitoWeb.Text)
                FormPrincipale.ListView2.Items(FormPrincipale.ListView2.Items.Count - 1).SubItems.Add(tbNiknameSitoWeb.Text)
                FormPrincipale.ListView2.Items(FormPrincipale.ListView2.Items.Count - 1).SubItems.Add(tbPasswordSitoWeb.Text)
                FormPrincipale.ListView2.Sorting = SortOrder.Ascending
            End If
    
            If File.Exists(PatchWeb) = False Then
                Using crea As New StreamWriter(PatchWeb)
                    For c = 0 To FormPrincipale.ListView2.Items.Count - 1
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).Text)
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).SubItems(1).Text)
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).SubItems(2).Text)
                    Next
                    crea.Close()
                End Using
            Else
                Using crea As New StreamWriter(PatchWeb)
                    For c = 0 To FormPrincipale.ListView2.Items.Count - 1
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).Text)
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).SubItems(1).Text)
                        crea.WriteLine(FormPrincipale.ListView2.Items(c).SubItems(2).Text)
                    Next
                    crea.Close()
                End Using
            End If
           
            MsgBox("Dati salvati correttamente")
            Me.Close()
        
        End Sub
    
    all'inserimento dei dati il sorting dev'essere imposta su "none".... se lo trova in modo diverso... va in crash!...
  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    e444 ha scritto:


    un passetto per volta...

    per "elementi" cosa intendi?...
    gli elementi della listview (quindi gli items) o gli elementi del form che contiene la listview?
    In gergo informatico, non esistono 'elementi' in un form, ma 'controlli'.
    Quindi mi riferisco agli 'elementi' del listview; chiamali items in inglese, ma la sostanza non cambia.

    e444 ha scritto:


    Perche ho provato ad inserire il comando del sorting DOPO il caricamento degli elementi... ma va in crash lo stesso!...
    Questo mi pare poco probabile (sempre ammesso che il problema sia del sorting piuttosto che dei dati inseriti)

    e444 ha scritto:


    Ho provato a fare questa variante...
    Ed è appunto quello che ti avevo suggerito io: prima e dopo.
    Però non ha senso ripetere le stesse istruzioni 2 volte all'interno del tuo If/Then/Else?
    Come ho detto più volte, basta prima e dopo, così:
    
    Private Sub PulsanteAggiungiWeb(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ' PRIMA
            FormPrincipale.ListView2.Sorting = SortOrder.None 
            
            If FormPrincipale.ListView2.Items.Count = 0 Then
                FormPrincipale.ListView2.Items.Add(tbSitoWeb.Text)
                FormPrincipale.ListView2.Items(0).SubItems.Add(tbNiknameSitoWeb.Text)
                FormPrincipale.ListView2.Items(0).SubItems.Add(tbPasswordSitoWeb.Text)
            Else
                FormPrincipale.ListView2.Items.Add(tbSitoWeb.Text)
                FormPrincipale.ListView2.Items(FormPrincipale.ListView2.Items.Count - 1).SubItems.Add(tbNiknameSitoWeb.Text)
                FormPrincipale.ListView2.Items(FormPrincipale.ListView2.Items.Count - 1).SubItems.Add(tbPasswordSitoWeb.Text)
            End If
            
            ' DOPO
            FormPrincipale.ListView2.Sorting = SortOrder.Ascending 
                
            [cut]
    
  • Re: Inserimento dati ListView.... errore InvalidArgument=Valore di '1' non valido per 'index'. Nome parametro: index

    gibra ha scritto:


    e444 ha scritto:


    Perche ho provato ad inserire il comando del sorting DOPO il caricamento degli elementi... ma va in crash lo stesso!...
    Questo mi pare poco probabile (sempre ammesso che il problema sia del sorting piuttosto che dei dati inseriti)
    Ti dico che l'ho provato!...
    sai cosa succedeva?... il primo inserimento andava bene... dal secondo andava in crash!...

    gibra ha scritto:


    e444 ha scritto:


    Ho provato a fare questa variante...
    Ed è appunto quello che ti avevo suggerito io: prima e dopo.
    Però non ha senso ripetere le stesse istruzioni 2 volte all'interno del tuo If/Then/Else?
    Come ho detto più volte, basta prima e dopo, così:
    
    Private Sub PulsanteAggiungiWeb(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ' PRIMA
            FormPrincipale.ListView2.Sorting = SortOrder.None 
            
            If FormPrincipale.ListView2.Items.Count = 0 Then
                FormPrincipale.ListView2.Items.Add(tbSitoWeb.Text)
                FormPrincipale.ListView2.Items(0).SubItems.Add(tbNiknameSitoWeb.Text)
                FormPrincipale.ListView2.Items(0).SubItems.Add(tbPasswordSitoWeb.Text)
            Else
                FormPrincipale.ListView2.Items.Add(tbSitoWeb.Text)
                FormPrincipale.ListView2.Items(FormPrincipale.ListView2.Items.Count - 1).SubItems.Add(tbNiknameSitoWeb.Text)
                FormPrincipale.ListView2.Items(FormPrincipale.ListView2.Items.Count - 1).SubItems.Add(tbPasswordSitoWeb.Text)
            End If
            
            ' DOPO
            FormPrincipale.ListView2.Sorting = SortOrder.Ascending 
                
            [cut]
    
    Si ho provato come mi hai suggerito e va bene... il fatto è che mi sembra di aver capito che lo fa stranire la situazione "Ascending" del SortOrder... o meglio, lui necessita che quando esegue le istruzioni, il SortOrder sia su "None" e si incasina perche, secondo me, tenta di mettere poi pure in ordine anche i SubItem, cosa che, ovviamente, non può fare... perche sono vincolati dall'item "0"... poi magari può essere che la spiegazione sia un'altra... ma sta di fatto che inserendo il "None" al principio... tutto funziona benissimo.
Devi accedere o registrarti per scrivere nel forum
10 risposte