Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117

    VB6 - Bloccare una checkbox

    Ciao! Mi serve di bloccare una checkbox solo che la proprietà enabled non mi piace...se blocco la check me la ingrigisce tutta! A me serve che rimanga li com'è (selezionata o no) ma che non si possa cambiare il value....

    A tal proposito ho creato una funzioncina:

    codice:
    If inLoad = False Then
        Dim valore
        valore = controllo.Value
        inLoad = True
        If valore = 0 Then
            controllo.Value = 1
        Else
            controllo.Value = 0
        End If
        inLoad = False
    End If
    Inload è una variabile booleana che mi indica quando il form è in caricamento (in modo che si possano popolare le checkbox normalmente).

    Il problemma è che mi servirebbe associare a "controllo" (che è una variabile CONTROL appunto) il nome della checkbox che ho appena cliccato....non posso usare stringhe perchè mi da errore...

    avete qualche consiglio (anke se non sulla funzione ma solo in generale per ottenere ciò che voglio).

    Grazieee

  2. #2
    Ti basta inserire questo codice:
    codice:
    Private Sub Check1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Check1.Value = 0 Then Check1.Value = 1 Else Check1.Value = 0
    End Sub
    dove Check1 è il nome del tuo CheckBox.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Veronica80
    Registrato dal
    May 2006
    Messaggi
    2,117
    ehm si...per quello ho la funzione che ho scritto (per tenere il valore che aveva prima del click, che nn sempre è 1) solo che siccome ho 50 checkbox volevo sapere se c'era un modo di associare la cliccata dentro la funzione così da rikiamare la funzione al click invece che riscrivere tutto!

  4. #4
    Ti basta creare un array di controlli con le checkbox in questione e gestire il loro evento MouseDown con un gestore di eventi simile a quello sopraindicato; in ogni caso non è necessario usare la variabile inLoad perché l'evento MouseUp viene scatenato solo al cambiamento manuale (non da codice) del valore della checkbox.
    codice:
    Private Sub Check1_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Check1(Index).Value = 0 Then Check1(Index).Value = 1 Else Check1(Index).Value = 0
    End Sub
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Attenzione!!!
    Oltre all'evento "mouse up" del mouse, occorre valutare anche il caso del tasto "spazio" della tastiera, che va ad invertire il valore del checkbox!
    Quindi, oltre al codice scritto da MItaly, aggiungi anche:
    codice:
    Private Sub Check1_KeyUp(KeyCode As Integer, Shift As Integer)
        If KeyCode = 32 Then: Me.Check1 = ((1 + Me.Check1) Mod 2)
    End Sub
    Purtroppo non si può utilizzare solo l'evento "click" (l'evento click nel caso del ceck si attiva anche da tastiera), perchè diventerebbe una funzione ricorsiva visto che reimpostando il valore del check si verificherebbe nuovamente l'evento click.
    Quindi devi perforza vedere sia Mouse Up che Key Up.
    Se vuoi utilizzare solo un evento, dovresti utilizzare "Validate", ma otterresti un effetto esteticamente brutto (cliccando sul check vedresti cambiare il valore per poi tornare al valore precedente).

  6. #6
    se non sbaglio inizialmente chiedevi come bloccare i checkbox senza usare la proprietà enabled... puoi usare un frame, metti tutti i checkbox dentro e nel momento in cui disabiliti il frame i checkbox risulteranno invariati ma non potrai modificarli...

    spero di averti aiutato, ciao ciao
    I database... la mia passione + o -

  7. #7
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Originariamente inviato da power.mobile
    se non sbaglio inizialmente chiedevi come bloccare i checkbox senza usare la proprietà enabled... puoi usare un frame, metti tutti i checkbox dentro e nel momento in cui disabiliti il frame i checkbox risulteranno invariati ma non potrai modificarli...

    spero di averti aiutato, ciao ciao
    concordo in pieno!
    è anche vero che se le varie check sono sparse in giro per il form.. non è possibile riunirle in un unico frame...e usare tanti frame per quante sono le check..non è il massimo..
    Jupy

  8. #8
    quello era sottinteso... le checkbox devono essere vicine....
    I database... la mia passione + o -

  9. #9
    Non so se ho capito cosa vuoi Veronica....però se ho capito giusto prova con questo codice:

    For Each ctl In Controls
    If (TypeOf ctl Is CheckBox) Then
    If inLoad = False Then
    Dim valore
    valore = ctl.Value
    inLoad = True
    If valore = 0 Then
    ctl.Value = 1
    Else
    ctl.Value = 0
    End If
    inLoad = False
    End If
    End If
    Next

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.