Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922

    [access] deselezionare checkbox seleziona tutti se almeno una voce non è spuntata

    Notte a tutti. Problema quotidiano di access.
    Devo generare dinamicamente delle query abbastanza complesse e mi sono arenato sul classico seleziona/deseleziona tutti. Ho provato a crearmi una semplice mascherina giusto per capire il funzionamento della cosa. Ho messo quattro checkbox, cb1, cb2 e cb3 che fanno riferimento rispettivamente alle voci pane, pasta, pizza e cbAll che serve per selezionare e deselezionare il tutto. Sembra essere tutto ok nel senso che mi viene generata la stringa che mi aspetto (e che mi servirà nella reale applicazione per mettere le voci scelte all'interno di un IN).
    Vengo al dunque. Supponiamo che io spunti la voce seleziona tutti. Le tre checkbox mi vengono giustamente spuntate. Se deseleziono una delle tre voci però il pulsante seleziona tutti rimane spuntato e io vorrei che questo non accadesse.

    Poichè le voci selezionabili saranno parecchie e non 3 come in questa prova vorrei sapere come evitare di dover scrivere una schifezza del genere per ogni singola checkbox.

    codice:
    Private Sub cb1_Click()
    If cb1.Value = 0 Then
    cbAll.Value = 0
    End If
    End Sub
    Immagino ci sia il modo di automatizzare il tutto ma non so come.
    Grazie e scusate se mi sono dilungato. Notte ancora.


    codice:
    Option Base 1
    
    Private Sub btnOk_Click()
    Dim i As Integer
    Dim str As String
    str = ""
    cibi = Array("Pane", "Pasta", "Pizza")
    For i = 1 To 3
       If (Me.Controls("cb" & i) = -1) Then
       str = str & cibi(i) & ","
       End If
    Next i
    If Len(str) > 0 Then
    str = Mid(str, 1, Len(str) - 1)
    End If
    MsgBox (str)
    End Sub
    
    Private Sub cbAll_Click() 
    Dim i As Integer
    For i = 1 To 3
       Me.Controls("cb" & i) = Me.cbAll
    Next i
    End Sub

  2. #2
    Anzichè chiamare il checkbox del pane cb1, il checkbox della pasta cb2 e via dicendo, li crei "in serie" con lo stesso nome (es cb_cibi) e utilizzando la proprietà index con 4 righe di codice risolvi il problema in questo modo:

    codice:
    Private Sub cb_cibi_Click(index as integer) 
    if cb_cibi(index).value=1 then
    cbAll.value = 0
    end if
    End Sub
    The Fresh...remaker
    A volte la risposta è sotto ai nostri occhi, bisogna solo aver voglia di cercarla!!
    http://www.angelsinthedark.it

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Ciao. Grazie per avermi risposto.
    Stavo cercando di mettere in pratica il tuo suggerimento ma mi sono bloccato subito. Se creo le mie tre checkbox e provo ad assegnargli lo stesso nome, mi viene restituito l'errore "nome di controllo cb_cibi già in uso". Dove sbaglio?

  4. #4
    Utente di HTML.it L'avatar di longline
    Registrato dal
    Sep 2001
    Messaggi
    5,363
    Secondo me hai usato una check box come comando per selezionare tutti perchè ti sei ispirato alle pagine web. Se invece utilizzi un pulsante di comando il problema non ce l'hai più.

    Ogni volta che viene premuto il pulsante, tutte le checkbox vengono impostate a true. Fine.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da longline
    Secondo me hai usato una check box come comando per selezionare tutti perchè ti sei ispirato alle pagine web. Se invece utilizzi un pulsante di comando il problema non ce l'hai più.

    Ogni volta che viene premuto il pulsante, tutte le checkbox vengono impostate a true. Fine.
    Ciao. Ho provato a seguire il tuo consiglio, quindi a sostituire la checkbox con un pulsante ma ottengo un errore (di run-time 2113 è stato immesso un valore non valido per il campo) in corrispondenza della riga Me.Controls("cb" & i) = Me.cbAll in questa sub

    codice:
    Private Sub cbAll_Click() 
    Dim i As Integer
    For i = 1 To 3
       Me.Controls("cb" & i) = Me.cbAll
    Next i
    End Sub
    Come la dovrei modificare?

  6. #6
    Togliendo = Me.cbAll
    e mettendo

    Me.Controls("cb" & i) = 1 se vuoi fare un seleziona tutti
    Me.Controls("cb" & i) = 0 se vuoi fare un deseleziona tutti


    The Fresh...remaker
    A volte la risposta è sotto ai nostri occhi, bisogna solo aver voglia di cercarla!!
    http://www.angelsinthedark.it

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da mentos
    Togliendo = Me.cbAll
    e mettendo

    Me.Controls("cb" & i) = 1 se vuoi fare un seleziona tutti
    Me.Controls("cb" & i) = 0 se vuoi fare un deseleziona tutti


    Grazie mentos.
    L'ho modificata così

    codice:
    Private Sub cdAll_Click()
    Dim i As Integer
    For i = 1 To 3
       Me.Controls("cb" & i) = -1
    Next i
    End Sub
    e mi seleziona tutte le checkbox ma come faccio a fare in modo che una volta selezioni e una volta deselezioni tutto? Grazie ancora.

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Allora, l'ho riscritta così, ho fatto un pò di prove e sembra funzionare

    codice:
    Private Sub cdAll_Click()
    Dim i As Integer
    Dim tot As Integer
    tot = 0
    For i = 1 To 3
        If (Me.Controls("cb" & i) = -1) Then
        tot = tot + 1
        End If
    Next i
    For i = 1 To 3
        If tot = 0 Then
        Me.Controls("cb" & i) = -1
        Else
        Me.Controls("cb" & i) = 0
        End If
    Next i
    End Sub
    però, anche solo ad intuito, ho la netta sensazione che sia scritta da "cani".
    Se avete soluzioni più eleganti e immagino proprio di sì, fatemi sapere.
    Io intanto continuo a smanettarci per conto mio.

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.