Checkbox, salvare i checkbox checcati

di il
8 risposte

Checkbox, salvare i checkbox checcati

Ciao a tutti,

ho un problema che mi tiene in scacco da giorni, lo so che la soluzione è dietro l'angolo ma non riesco a trovarla. Mi aiutate, pls?

allora, ho un form con una CheckedListBox. Non so quanti e quali check box ci saranno perché li importo da un file di testo… così:

    Dim c As Integer = 0 ' contatore di tag
    Private Sub frmTag_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim objReaderTag As New IO.StreamReader(pathOpzioni + "\tag.op")
        Do
            stLine = objReaderTag.ReadLine
            If stLine Is Nothing Then Exit Do
            c += 1 ' conta quanti tag sono memorizzati
            cbxTag.Items.Add(stLine)
        Loop

        Height = c * 22 + 14
        cbxTag.Height = c * 22
    End Sub

adesso, alla chiusura del form voglio salvare i checkbox spuntati in un array di tipo stringa… ho provato di tutto, ma non funziona. ho provato ad esempio in questo modo:

    Private Sub frmTag_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed
        For x As Integer = 0 To c - 1
            If cbxTag.CheckedItems(x) = True Then
                stTagArray(x) = cbxTag.Items(x)
            End If
        Next
    End Sub

dove sbaglio?

come posso fare?

grazie in anticipo a tutti.

ciao.

8 Risposte

  • Re: Checkbox, salvare i checkbox checcati

    27/06/2023 - salvodv ha scritto:


    alla chiusura del form voglio salvare i checkbox spuntati in un array di tipo stringa… ho provato di tutto, ma non funziona

    “Non funziona” ovvero? Cosa succede?

    Altra domanda: dove vorresti salvare i valori spuntati?

  • Re: Checkbox, salvare i checkbox checcati

    If cbxTag.CheckedItems(x) = True Then                stTagArray(x) = cbxTag.Items(x)            End If

    E se cbxTag.CheckedItems(x) = false?
     stTagArray:

    X=1 false stTagArray mostra il valore precedentemente utilizzato?

    Se richiami l'array per settare le checkbox al valore x=1 dovrebbe essere unchecked ma tu hai sempre checked, perché assegni solo i valori checked. Ripetendo n volte alla fine hai un array che non rispetta la sequenza dei check.

    Prova a mettere il valore nel caso sia false o azzera l'array prima del ciclo for e vedi cosa succede.

  • Re: Checkbox, salvare i checkbox checcati

    27/06/2023 - salvodv ha scritto:


    … alla chiusura del form voglio salvare i checkbox spuntati in un array di tipo stringa… 

    Salvare  solo in un array alla chiusura del form (dell'applicazione?) non ha senso se poi non salvi in un file come quello da cui leggi all'inizio.

  • Re: Checkbox, salvare i checkbox checcati

    alla chiusura del form voglio salvare i checkbox spuntati in un array di tipo stringa. 

    Se chiudi il form perdi tutto. Devi salvare il contenuto in un file o in un db. Il che renderebbe inutile anche l'uso di un array. 

  • Re: Checkbox, salvare i checkbox checcati

    Ok… sono stato superficiale. chiedo scusa a tutti

    il codice che ho riportato nella seconda parte del mio post iniziale l'ho scritto in modo veloce in due secondi giusto per rendere l'idea di cosa volevo fare, ma è sbagliato (cbxTag.CheckedItems(x) è una stringa non può essere true o false, questo il primo errore, poi ho usato la stessa variabile per il conteggio del ciclo for to next e per l'indice dell'array… secondo errore)

    adesso mi spiego meglio con più calma:

    nella prima parte del codice visualizzo il form con i vari checkbox.

    dopo, alla chiusura, voglio che solo i checkbox spuntati vengano salvati in un array di tipo stringa che poi salvo in un file di testo.

    io l'ho pensata così:

     Private Sub frmTag_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed
            a = 0
            For x As Integer = 0 To c - 1 ' c è una variabile che ha contato all'apertura del form quanti checkbox ci sono effettivamente
                ' qui dovrei scrivere la condizione per la quale il codice salvi solo le checkbox spuntate
                ' tipo un if Then Else che verifichi se la check box è spuntata oppure no (questo non so come farlo)
                ' qualcosa del tipo:
                ' If 'la checkbox numero x è spuntata?' Then
                	' stTagArray(a)=  '(il nome della checkbox spuntata presa in esame che ha passato la condizione If Then Else)
                	' a += 1
                ' End if
            Next
            ' alla fine salvo tutto in un file:
            Dim objWriterTag as New IO.StreamWriter(pathOpzioni + "\tag.op", True)
            For y As Integer = 0 to a - 1
            	objWriterTag.WriteLine(stTagArray(y)
            Next
            objWriterTag.close()
        End Sub

    ok? sono stato più chiaro?

    PS: quando vado a scrivere il nome della checkbox nell'array il codice dovrebbe essere: stTagArray(a) = cbxTag.Items(x) …

    grazie a tutti in anticipo.

    ciao,

    Salvo

  • Re: Checkbox, salvare i checkbox checcati

    Gli elementi di una CheckedListBox sono oggetti di tipo Item e non mi pare che abbiano la proprietà Name che, del resto, non sarebbe molto utile. Più utile mi sembra invece l'indice degli elementi “checkati”, che puoi ottenere esaminando la Collection CheckedItems oppure, uno per uno, con il metodo GetItemCheckState. QUI c'è scritto tutto.

  • Re: Checkbox, salvare i checkbox checcati

    Ho risolto!!!

    lo sapevo che la soluzione era dietro l'angolo… per chi lo vuole sapere:

        Private Sub frmTag_Closed(sender As Object, e As EventArgs) Handles MyBase.Closed
            nTag = cbxTag.CheckedItems.Count ' imposta quanti tag sono stati spuntati
    
            ReDim stTagArray(nTag) ' azzera la variabile stringa dei tag. Questo è fondamentale perché la variabile deve essere anche definita in questa routine
    
            For a As Integer = 0 To nTag - 1
                stTagArray(a) = cbxTag.CheckedItems(a) ' memorizza ogni tag nell'array
            Next
        End Sub
    

    ringrazio tutti per avermi dato supporto.

    28/06/2023 - grumpy ha scritto:


    Gli elementi di una CheckedListBox sono oggetti di tipo Item e non mi pare che abbiano la proprietà Name che, del resto, non sarebbe molto utile. Più utile mi sembra invece l'indice degli elementi “checkati”, che puoi ottenere esaminando la Collection CheckedItems oppure, uno per uno, con il metodo GetItemCheckState. QUI c'è scritto tutto.

    grazie grumpy… poi gli butto un occhio… sicuramente imparo qualcosa in più 

    ciao,

    alla prossima.

  • Re: Checkbox, salvare i checkbox checcati

    Va bene se hai risolto, ma non vedo il motivo di trasferire gli elementi “checked” in un array.

    Un'altra cosa: nella lettura dal file è meglio se usi DO WHILE… anziché testare per Nothing all'interno del loop.

Devi accedere o registrarti per scrivere nel forum
8 risposte