Newsgroup: it.comp.lang.visual-basic
Titolo: help chkbox

Ciao a tutti,
ho un piccolo problema con l'utilizzo di un grosso numero di chkbox (array
di controlli) in un form...
Vorrei implementare un loop for next per "contare" il numero di chkbox
selezionati, ecco le istruzioni che uso:
A=0
For i = 0 To 10 ' i chkbox sono 11
If (Chki1(i).Value = 0) Then
        A = A + 1
End If
Next
Print A
purtroppo così com'è non va bene e non so xkè...
Attendo suggerimenti,
grazie sin d'ora,
ntonjfi

"ntonjfi" <ficcant...@nospamlibero.nospamit> ha scritto

"Chki1" e' corretto ?
cosi' sembra funzionare benone:
Private Sub Command1_Click()
    Dim j As Long, a As Long
    For j = 0 To 11 'sono 12
        If chkProva(j).Value = 1 Then a = a + 1
    Next
    Caption = "selezionati: " & CStr(a)
End Sub
--
ciao, j.
--
www.sundaysw.com

 purtroppo così com'è non va bene e non so xkè...
Puoi fare anche cosi':
  Dim Ctl As Control
  Dim CheckBoxOn As Integer
  CheckBoxOn = 0
  For Each Ctl In Controls
     If TypeOf Ctl Is CheckBox Then
       If Ctl.Value Then CheckBoxOn = CheckBoxOn + 1
     End If
  Next
  Debug.Print CheckBoxOn


ora funziona tutto ok...
Un'ultima cosa: quando inserisco nel mio codice le seguenti istruzioni
    For j = 0 To 10 'sono 11
        If Chki1(j).Value = 1 Then
        frmfinale.txtfini1(j).Enabled = False '1
        frmfinale.txtfininsi(j).Enabled = False '2
    Next
il debug mi da il seguente errore:
errore di compilazione next senza for
Io baipasso questo errore scrivendo un altro ciclo apposito per l'istruzione
commentata con 2 ma, evidentemente, non mi sembra il massimo della
funzionalità; è come se per un if non sia possibile effettuare + di 1 linea
di comando...
E' prorpio così o esiste (e credo prorpio di si) un metodo o una sintassi
per consentire ciò?
Grazie,
ntonjfi

 errore di compilazione next senza for
[CUT]
Manca END IF

 ntonjfi
--
ciao, j.
www.sundaysw.com

        If Ctl.Value Then CheckBoxOn = CheckBoxOn + 1
Per entrambi: attenzione ai valori delle proprietą.
Se per esempio il controllo non č disponibile, entrambe
le routine se ne vanno a donnine allegre.
CheckBox.Value puņ essere:
0 - Unchecked  - non selezionata - vbUnchecked
1 - Checked  - selezionata - vbChecked
2 - Grayed - non disponibile - vbGrayed
Bye, G.

 2 - Grayed - non disponibile - vbGrayed
Rimediamo subito:
If Ctl.Value = 1 Then CheckBoxOn = CheckBoxOn + 1
Grazie

 If Ctl.Value = 1 Then CheckBoxOn = CheckBoxOn + 1
Forse... :-)
Un CheckBox potrebbe essere stato prima selezionato,
e poi disattivato. Cioè potrebbe essere sia Grayed che Checked.
In quel caso lo devi considerare attivo o no ?
Ovviamente è una domanda retorica, la decisione va presa
secondo la logica e lo scopo del programma, che io non conosco.
In alcuni casi, potrebbe essere addirittura necessario riattivare
il CheckBox, controllare se è selezionato e disattivarlo.
O alternativamente mantenere delle variabili Boolean "parallele",
che sono anche più veloci da controllare ;-).
P.S.: Lo so che sono un rompiscatole, ma al posto tuo userei
"vbChecked" al posto di quell'uno. E' più comprensibile se qualcun
altro (o magari tu stesso fra qualche tempo) dovrà rileggere
quel listato.
Bye, G.
--
Le risposte alle tue domande sono sul Sito Comune
di questo NewsGroup: 
http://it-lang-vb.net/
... e nell'help in linea !

 P.S.: Lo so che sono un rompiscatole
NOOOOO!!!! :-)))
