Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    13

    [VB.Net] Aiuto riguardo gruppo di oggetti simili

    Ciao a tutti, ho realizzato un semplice quiz in Vb.net che sfrutta un database xml.
    sull'interfaccia grafica ho una textbox per l'inserimento della domanda
    e tre radiobutton per le risposte.
    Se osservate il codice che vi posto, noterete che i tre radiobutton si comportano esattamente nella stessa maniera, per questo chiedo:
    anzichè scrivere codice ripetitivo per ogni radiobutton mi insegnate un modo per generalizzare il comportamento dei 3 in un' unica espressione? grazie!!

    codice:
    Public Class GraficaQuiz
        Dim punti As Integer
        Dim index As Integer = 0
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If (RadioButton1.Checked = True) And (Questions.Item(index + 15).RValore.ToString = "V") Then
                punti = punti + 1
                lblScore.Text = punti
            End If
            If (RadioButton1.Checked = True) And (Questions.Item(index + 15).RValore.ToString = "F") Then
                Label1.Text = "Hai sbagliato!"
            End If 
    
    
            If (RadioButton2.Checked = True) And (Questions.Item(index + 16).RValore.ToString = "V") Then
                punti = punti + 1
                lblScore.Text = punti
            End If
            If (RadioButton2.Checked = True) And (Questions.Item(index + 16).RValore.ToString = "F") Then
                Label1.Text = "Hai sbagliato!"
            End If
    
            If (RadioButton3.Checked = True) And (Questions.Item(index + 17).RValore.ToString = "V") Then
                punti = punti + 1
                lblScore.Text = punti
            End If
            If (RadioButton3.Checked = True) And (Questions.Item(index + 17).RValore.ToString = "F") Then
                Label1.Text = "Hai sbagliato!"
            End If
        End Sub

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    252
    In questo esempio puoi vedere se la cosa ti si snellisce un po.

    Crei una sub "Risposta" dove esegui i controlli di vero , falso.
    Quando clicchi il button invii la chiamata alla sub "Risposta" inviado il numero del button premuto, così ti eviti poi di fare l'IF di controllo.
    Volendo puoi eliminare il button e inviare la chiamata a "Risposta" direttamente da ogni Radiobutton .

    Questa è la prima cosa che mi è venuta in mente per far girare meglio ilò tuo programma

    con Selectcase semplifichi le funzioni IF

    Quello che mi mette il dubbio è il tuo popolare l' "index" all'interno della verifica
    codice:
     (Questions.Item(index + 16 ).RValore.ToString = "V")
    dovresti incrementarlo al di fuori .
    codice:
     index +=1
     (Questions.Item(index ).RValore.ToString = "V")
    Non ti ho postato l'esatta soluzione ma se con l'esempio ci arrivi da solo è meglio
    Magari ti danno suggerimenti migliori e meglio scritti.



    codice:
    Public Class Form1
    
        Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged
    
    
        End Sub
        Private Sub Risposta(ByVal Check As Integer)
            ' sub cove controlli le risposte in base al radiobutton premuto
            Select Case Check
                Case "1"
                    Select Case (Questions.Item(index).RValore.ToString)
                        Case "V"
                            punti += 1
                            lblscore.text += 1
                            index += 1 'incrementi l'index se va cambiato ad ogni risposta altrimenti lo incrementi alla fine di questa sub al di fuori del Select Case
    
                        Case "F"
                            textbox1.text = "Hai Sbagliato"
                            index += 1 'incrementi l'index se va cambiato ad ogni risposta anche se errata altrimenti lo incrementi alla fine di questa sub al di fuori del Select Case
    
    
                    End Select
    
                Case "2"
                    Select Case (Questions.Item(index).RValore.ToString)
                        Case "V"
                            punti += 1
                            lblscore.text += 1
                            index += 1 'incrementi l'index se va cambiato ad ogni risposta altrimenti lo incrementi alla fine di questa sub al di fuori del Select Case
    
                        Case "F"
                            textbox1.text = "Hai Sbagliato"
                            index += 1 'incrementi l'index se va cambiato ad ogni risposta anche se errata altrimenti lo incrementi alla fine di questa sub al di fuori del Select Case
    
    
                    End Select
                Case "3"
                    Select Case (Questions.Item(index).RValore.ToString)
                        Case "V"
                            punti += 1
                            lblscore.text += 1
                            index += 1 'incrementi l'index se va cambiato ad ogni risposta altrimenti lo incrementi alla fine di questa sub al di fuori del Select Case
    
                        Case "F"
                            label1.text = "Hai Sbagliato"
                            index += 1 'incrementi l'index se serve ad ogni risposta anche se errata altrimenti esci dalla funzione 
                            Exit Sub
    
    
                    End Select
            End Select
            MsgBox(Check)
    
    
        End Sub
    
    
        Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged
    
        End Sub
    
        Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged
    
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    
        End Sub
        Public Sub New()
    
            ' Chiamata richiesta dalla finestra di progettazione.
            InitializeComponent()
            RadioButton1.Checked = False
            RadioButton2.Checked = False
            RadioButton3.Checked = False
    
    
            'nessun radiobutton premuto all'avvio dell'applicazione
    
        End Sub
    
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            If RadioButton1.Checked = True Then
                Risposta("1")
            ElseIf RadioButton2.Checked = True Then
                Risposta("2")
            ElseIf RadioButton3.Checked = True Then
                Risposta("3")
            End If
    
            'richiami la sub Risposta dando il valore a check in base al radiobutton premuto
    
        End Sub
    End Class

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    13
    Caspita! grande!! mi hai messo via dicendomi un sacco di cose: all'evento change, non avevo pensato, mi hai messo a posto il problema dell'index, e hai usato due select case annidati, dannazione quanto devo imparare ancora!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    252
    Originariamente inviato da Knaives
    dannazione quanto devo imparare ancora!!!
    a chi lo dici

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.