Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [VB.NET] CheckBox

    ho un problemino con le checkbox.
    Mi spiego meglio: ho 4 checkbox

    percui

    CheckBox1
    CheckBox2
    CheckBox3
    CheckBox4

    ogni checkbox ha un valore

    CheckBox1 = 3
    CheckBox2 = 6
    CheckBox3 = 1
    CheckBox4 = 4



    adesso supponiamo che ho un valore iniziale ad esempio 10 quindi

    Dim var as interger
    var = 5


    vorrei far si che quando seleziono una checkbox percui

    CheckBox1.checked = True

    lui mi sommi un valore

    percui se la prima è selezionta
    verà var + 3

    se però è selezionata anche l'ultima
    verà var + 3 + 4


    Come posso fare??

  2. #2
    Memorizza i valori di ogni checkbox nella sua proprietà tag, quindi gestiscine gli eventi CheckedChanged per effettuare la somma.
    codice:
    Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        CheckBox1.Tag = 3
        CheckBox2.Tag = 6
        CheckBox3.Tag = 1
        CheckBox4.Tag = 4
    End Sub
    Private Sub CheckBoxes_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged, CheckBox4.CheckedChanged
        Dim var As Integer
        var = CheckBox1.Tag + CheckBox2.Tag + CheckBox3.Tag + CheckBox4.Tag
        'qui fa qualcosa con il contenuto di var
        '...
    End Sub
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    ho provato a fare come mi hai suggerito te... ma così facendo quando stampo in una label il valore di var (all'interno dell'evento rivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click) mi dice che var non è dichiarato.

    Sarà forse perchè è locale e non globale ?

    Cosi si ovvia a ciò ??

    Grazie

  4. #4
    Puoi o spostare all'esterno di CheckBoxes_CheckedChanged la dichiarazione di var (dichiarandola come privata della classe) o, meglio, eliminare CheckBoxes_CheckedChanged e var ed eseguire il conto direttamente in Button1_Click.
    codice:
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = CStr(CInt(CheckBox1.Tag) + CInt(CheckBox2.Tag) + CInt(CheckBox3.Tag) + CInt(CheckBox4.Tag) + 5) 'o il valore iniziale che vuoi
    End Sub
    Il primo dei due metodi ha senso solo se var deve essere essere modificata anche da altre procedure.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Moderazione

    Originariamente inviato da Traxsung
    [VB.NET] CheckBox
    Suggerisco di usare titoli più significativi, che indichino meglio qual è il problema affrontato nella discussione. Questo l'ho corretto io.

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

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

  6. #6
    Scusami alka... sono nuovo del forum, ma adesso ho capito

  7. #7
    Ho provato a fare come mi hai suggerito te:

    codice:
     Label1.Text = CStr(CInt(CheckBox1.Tag) + CInt(CheckBox2.Tag) + CInt(CheckBox3.Tag) + CInt(CheckBox4.Tag))
    ho impostato questi valori:

    CheckBox1.Tag = 5
    CheckBox2.Tag = 10
    CheckBox3.Tag = 15
    CheckBox4.Tag = 20

    ma non capisco il perchè mi visualizza sempre come risultato 50

  8. #8
    In effetti ho scritto una castroneria... ecco il codice corretto:
    codice:
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = CStr(CInt(CheckBox1.Tag) * (-CInt(CheckBox1.Checked)) + CInt(CheckBox2.Tag) * (-CInt(CheckBox2.Checked)) + CInt(CheckBox3.Tag) * (-CInt(CheckBox3.Checked)) + CInt(CheckBox4.Tag) * (-CInt(CheckBox4.Checked)) + 5) 'o il valore iniziale che vuoi
    End Sub
    (un po' intricato ma compatto ).
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    si grazie adesso va tutto perfettamente

    Mi spiegheresti:

    codice:
    CStr(CInt(CheckBox1.Tag) * (-CInt(CheckBox1.Checked))

  10. #10
    Il CStr presente all'inizio serve per convertire in una stringa il totale, che è un intero; per il resto il totale viene calcolato sommando tanti "blocchetti" fatti a questa maniera:
    codice:
    CInt(CheckBox1.Tag) * (-CInt(CheckBox1.Checked))
    questo codice prende il valore di CheckBox1.Tag, ne effettua il cast esplicito ad Integer (non sarebbe strettamente necessario ma così evita il late binding) e lo moltiplica per -CInt(CheckBox1.Checked); questa ultima espressione sarà uguale a 1 se CheckBox1.Checked = True (ossia se la checkbox è selezionata) o a 0 in caso contrario (in maniera che l'intera espressione sia uguale a 0 se la checkbox non è selezionata o uguale al valore di CheckBox1.Tag se invece è selezionata). Questo perché CheckBox1.Checked è un valore Boolean, che, se convertito in intero, diventa -1 quando è True e 0 quando è False. Il "-" che metto davanti al CInt serve per cambiare di segno il risultato dell'espressione, perché altrimenti CInt(CheckBox1.Tag) verrebbe moltiplicato per -1 anziché per 1.
    Amaro C++, il gusto pieno dell'undefined behavior.

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.