Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455

    [VB.NET]Listview, aggiunge solo doppioni

    Ciao a tutti, questo listview è la prima volta che lo uso e mi sta facendo veramente scapocciare...adesso ho un altro problema...

    Allora:

    Io ho 4 Listview, 3 contengono i prodotti (con 2 colonne:Prdotto;prezzo.) mentre il quarto funziona da carrello della spesa.

    Per partire guardiamo solo uno dei listview...

    Ho bisogno di portare gli items del listview1 nel listview4 che è quello che corrisponde al carrello della spesa, tutto questo tracciando la provenienza degli items altrimenti quando rimuovero' il prodotto gli items finiranno tutti in un solo listview

    Il codice per aggiungere gli elementi all'altra listview è questo ed è all'interno di un pulsante:

    codice:
        Dim itm_ As ListViewItem
    
        Dim list1 As ListViewItem
        Dim list2 As ListViewItem
        Dim list3 As ListViewItem
    
        Dim str(5) As String
        Dim str2(5) As String
        Dim str3(5) As String
        Dim str4(5) As String
    
    ' Private sub pulsante etc...
    
    ' Qui parte il select case
    
    'case 1
                    itm_ = ListView1.SelectedItems(0)
                    itm_.Remove()
    
                    list1 = ListView5.Items.Add(str(0))
                    list1.SubItems.Add((str(1)))
                    list1.SubItems.Add(NumericUpDown1.Value)
    ' case 2
    
    
    ' case 3
    
    end select

    Questo codice è inserito all'interno del pulsante 'Aggiungi' sotto un Select Case.

    str corrisponde alle colonne della listview.

    Per richiamare il case faccio in modo che quando seleziono un item cambia la variabile 'number' e se questa corrisponde ad 1 parte il case 1...fin qui tutto bene...il codice funziona ma il problema è questo, faccio un esempio:

    una listview contiene:

    Prodotto: | Prezzo:

    Computer | 600
    Scheda video | 500

    Quindi adesso io aggiungo al carrello della spesa Computer e Scheda video selezionandoli uno alla volta.

    Prodotto: | Prezzo: |Quantità:
    Scheda Video | 500 |1
    Scheda Video | 500 |1

    Per quale motivo inserisce doppioni?

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da GhostFire
    Per quale motivo inserisce doppioni?
    Hai inserito la logica che verifica la presenza di un elemento duplicato?

    In ogni caso, il codice continua a essere "parziale": se ometti parti del codice, potremmo non vedere il punto in cui effettivamente si trova l'errore.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Definizione delle varie variabili nella classe principale:

    codice:
    
        Dim itm_ As ListViewItem
        Dim itm As ListViewItem
        Dim itm2 As ListViewItem
        Dim itm3 As ListViewItem
        Dim itm4 As ListViewItem
    
        Dim list1 As ListViewItem
        Dim list2 As ListViewItem
        Dim list3 As ListViewItem
    
        Dim str(5) As String
        Dim str2(5) As String
        Dim str3(5) As String
        Dim str4(5) As String
    
        Dim prezzo As String
        Dim costofinale As Integer
    
        Dim number As Integer
        Dim number2 As Integer
    Questo è il codice del pulsante aggiungi:

    codice:
      Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Select Case number
    
                Case 1
    
                    itm_ = ListView1.SelectedItems(0)
                    itm_.Remove()
    
                    list1 = ListView5.Items.Add(str(0))
                    list1.SubItems.Add((str(1)))
                    list1.SubItems.Add(NumericUpDown1.Value)
    
                Case 2
    
                    itm2 = ListView2.SelectedItems(0)
                    itm2.Remove()
                    list2 = ListView5.Items.Add(str2(0))
                    list2.SubItems.Add((str2(1)))
                    list2.SubItems.Add(NumericUpDown1.Value)
    
                Case 3
    
                    itm3 = ListView3.SelectedItems(0)
                    itm3.Remove()
                    list3 = ListView5.Items.Add(str3(0))
                    list3.SubItems.Add((str3(1)))
                    list3.SubItems.Add(NumericUpDown1.Value)
    
            End Select
    
            costofinale += ListView5.SelectedItems(0).SubItems(1).Text
            TextBox1.Text = costofinale
    Codice con cui carico il file txt contenenti i vari items:

    codice:
     Private Sub LoadList(ByVal lst As ListView, ByVal lst2 As ListView, ByVal lst3 As ListView, ByVal file As String) 'carica la lista dello shop
    
            On Error GoTo err
    
    
    
            Dim a As String
            Dim b As String
            Dim c As String
            Dim d As String
            Dim e As String
            Dim f As String
    
    
            FileOpen(1, file, OpenMode.Input)
    
            While Not EOF(1)
    
                Input(1, a) 'legge dal file
                Input(1, b)
                Input(1, c)
                Input(1, d)
                Input(1, e)
                Input(1, f)
    
                str(0) = a ' costruzioni
                str(1) = b ' prezzo costruzioni
    
    
                str2(0) = c ' hardware 
                str2(1) = d ' prezzo hardware
    
    
                str3(0) = e ' engine
                str3(1) = f ' prezzo engine
    
                itm_ = New ListViewItem(str)
                ListView1.Items.Add(itm_)
    
                itm2 = New ListViewItem(str2)
                ListView2.Items.Add(itm2)
    
                itm3 = New ListViewItem(str3)
                ListView3.Items.Add(itm3)
    
            End While
    
            FileClose(1)
    
            Exit Sub
    err:
            MsgBox("Error: shop data, can't load settings", MsgBoxStyle.Critical)
    
        End Sub
    Codice con cui richiamo i vari Case del pulsante aggiungi

    codice:
        Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
    
            number = 1
    
        End Sub
    
        Private Sub ListView2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView2.SelectedIndexChanged
    
            number = 2
    
        End Sub
    
        Private Sub ListView3_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView3.SelectedIndexChanged
    
            number = 3
    
        End Sub

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Se ho compreso bene quello che vuoi ottenere, cioè spostare un elemento e riportarlo indietro sulla rimozione, non può funzionare con la sola logica che hai scritto.

    Ad esempio, se tu selezioni un elemento, lo aggiungi al "carrello", selezioni un elemento in un'altra lista e fai rimuovi dal carrello, molto probabilmente l'elemento rimosso dal carrello finirà nel posto sbagliato. In breve, l'elemento che viene "spostato" non memorizza al proprio interno la provenienza, né inizialmente né successivamente.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Il punto è che il codice che ho scritto funziona sia per aggiungere che per rimuovere. Il problema è che quando faccio aggiungi , lui aggiunge solamente un item 2 volte.

    l'esempio è sempre questo:

    una listview contiene:

    Prodotto: | Prezzo:

    Computer | 600
    Scheda video | 500

    Quindi adesso io aggiungo al carrello della spesa Computer e Scheda video selezionandoli uno alla volta.

    Prodotto: | Prezzo: |Quantità:
    Scheda Video | 500 |1
    Scheda Video | 500 |1

    Quello che succede è che aggiunge due volte Scheda Video mentre Computer non viene aggiunto e viene cancellato dalla lista dei prodotti

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da GhostFire
    Il punto è che il codice che ho scritto funziona sia per aggiungere che per rimuovere. Il problema è che quando faccio aggiungi , lui aggiunge solamente un item 2 volte.
    Il codice che hai scritto funziona solo se segui un passo preciso nella selezione degli elementi e nel loro inserimento nel carrello.

    Ad esempio, hai legato la scelta della lista da cui effettuare lo spostamento al cambio dell'indice dell'elemento selezionato, ma non è detto che venga effettivamente selezionato un elemento diverso nel momento in cui viene richiesto l'inserimento tramite il pulsante, e quando c'è un solo elemento nella lista non è più possibile cambiare la selezione e quindi l'elenco da cui va spostato l'elemento.

    A mio avviso, dovresti predisporre almeno un pulsante per ogni lista.

    Rimane comunque da gestire il "ritorno indietro", che ha gli stessi problemi perché è basato sullo stesso concetto con cui è stato effettuato lo spostamento nel carrello.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Ciao, avevo pensato anche io ad un pulsante per ogni lista ma volevo metterne solo uno per fare una cosa piu' ordinata...vedrò un po' come risolvere...molto probabilmente opterò per un pulsante per ogni lista..

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Ciao a tutti,

    Adesso gli elementi vengono aggiunti correttamente. Il problema adesso è nel rimuoverli correttamente...

    Le nuove variabili sono queste:

    codice:
       'Selezioni Listview
        Dim item1 As ListViewItem
        Dim sel1 As String
        Dim sel2 As String
        Dim sel3 As String
        Dim insieme1 As String
    
        Dim item2 As ListViewItem
        Dim sel4 As String
        Dim sel5 As String
        Dim sel6 As String
        Dim insieme2 As String
    
        Dim item3 As ListViewItem
        Dim sel7 As String
        Dim sel8 As String
        Dim sel9 As String
        Dim insieme3 As String
    il codice aggiornato del pulsante aggiungi è questo:

    codice:
     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
    
            Select Case number
    
                Case 1
    
                    sel1 = ListView1.SelectedItems(0).Text
                    sel2 = ListView1.SelectedItems(0).SubItems(1).Text
                    sel3 = NumericUpDown1.Value
    
                    insieme1 = sel1
    
                    item1 = ListView5.Items.Add(insieme1)
    
                    item1.SubItems.Add(sel2)
    
                    item1.SubItems.Add(sel3)
    
                    ListView1.SelectedItems(0).Remove()
    
                Case 2
    
                    sel4 = ListView2.SelectedItems(0).Text
                    sel5 = ListView2.SelectedItems(0).SubItems(1).Text
                    sel6 = NumericUpDown1.Value
    
                    insieme2 = sel4
    
                    item2 = ListView5.Items.Add(insieme2)
    
                    item2.SubItems.Add(sel5)
    
                    item2.SubItems.Add(sel6)
    
                    ListView2.SelectedItems(0).Remove()
    
                Case 3
    
                    sel7 = ListView3.SelectedItems(0).Text
                    sel8 = ListView3.SelectedItems(0).SubItems(1).Text
                    sel9 = NumericUpDown1.Value
    
                    insieme3 = sel7
    
                    item3 = ListView5.Items.Add(insieme3)
    
                    item3.SubItems.Add(sel8)
    
                    item3.SubItems.Add(sel9)
    
                    ListView3.SelectedItems(0).Remove()
    
            End Select
    end sub
    mentre il codice di rimozione è sempre lo stesso.Qualcuno avrebbe idea di come fare? perchè al momento se aggiungo gli elementi in ordine dal primo listview al terzo gli elementi si rimuovono e finiscono nelle loro listview di appartenenza, il problema è che in questo caso me le rimuove solamente se parto dall'ultima e le rimuovo una dopo l'altra sempre in ordine, se invece poi inizio a rimuoverli in ordine casuale un item finisce sempre per andare nel posto sbagliato, altre volte ce ne finiscono 2...

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da GhostFire
    Adesso gli elementi vengono aggiunti correttamente. Il problema adesso è nel rimuoverli correttamente...
    Come avevo anticipato nei primi messaggi della discussione, ciascun elemento deve essere accompagnato dai propri dati fondamentali, tra cui ad esempio il riferimento alla lista da cui proviene.

    Per semplificare al massimo, potresti riportare il dato in una colonna nascosta e andarlo a leggere nel momento in cui l'elemento viene rimosso per sapere in quale lista deve essere ripristinato l'elemento in questione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    455
    Io stavo pensando di mettere un numero per ogni elemento di una listview alla quarta colonna che attualmente è visibile solo per testing come dicevi tu...il problema è che non so se posso richiamare quel singolo valore dalla quarta colonna ...

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.