Salve a tutti!
Mi servirebbe un aiuto per comprendere il mio errore in queste righe di codice:
PUBLIC SUB Button1_Click()
IF RadioButton1.Value = TRUE THEN
Estratti[0] = Int(Rnd(1, 91))
Label1.Text = Estratti[0]
ELSE IF RadioButton2.Value = TRUE THEN
DO
Estratti[0] = Int(Rnd(1, 91))
Estratti[1] = Int(Rnd(1, 91))
LOOP UNTIL Estratti[0] <> Estratti[1]
Label1.Text = Estratti[0]
Label2.Text = Estratti[1]
ENDIF
END
Sto cercando di creare un programma il quale, se il RadioButton1 è selezionato estrae a caso un numero e lo "stampa" nel Label1, mentre se invece è il RadioButton2 ad essere selezionato estrae due numeri (che devono essere differenti) e li "stampa" rispettivamente nel Label1 e nel Label2. Quando però vado ad eseguire il programma, premendo il Button1 (per innescare la funzione) con il RadioButton2 selezionato, mi restituisce un messaggio di errore con scritto "Null Object" (In basso a destra: "Stato dello stack: FMain.Button1_Click.498"; la riga 498 è quella immediatamente sotto al DO).
Grazie in anticipo :hatecomputer:
Rnd() solitamente richiede l'uso di RANDOMIZE prima per inizializzare il seme con cui vengono estratti i numeri. Quindi prima di utilizzare rdn() mettici un bel RANDOMIZE
PUBLIC SUB Button1_Click()
RANDOMIZE
IF RadioButton1.Value = TRUE THEN
Estratti[0] = Int(Rnd(1, 91))
Label1.Text = Estratti[0]
ELSE IF RadioButton2.Value = TRUE THEN
DO
Estratti[0] = Int(Rnd(1, 91))
Estratti[1] = Int(Rnd(1, 91))
LOOP UNTIL Estratti[0] <> Estratti[1]
Label1.Text = Estratti[0]
Label2.Text = Estratti[1]
ENDIF
END
Inoltre non hai messo nel pezzetto di codice l'istruzione con cui dichiari l'array Estratti. L'errore potrebbe risiedere proprio lì.
Quindi dovrebbe essere così:
PUBLIC Estratti AS Array
PUBLIC SUB Button1_Click()
IF RadioButton1.Value = TRUE THEN
DIM Estratti AS NEW Array[0]
Estratti[0] = Int(Rnd(1, 91))
Label1.Text = Estratti[0]
ELSE IF RadioButton2.Value = TRUE THEN
DIM Estratti AS NEW Array[0]
DIM Estratti AS NEW Array[1]
DO
Estratti[0] = Int(Rnd(1, 91))
Estratti[1] = Int(Rnd(1, 91))
LOOP UNTIL Estratti[0] <> Estratti[1]
Label1.Text = Estratti[0]
Label2.Text = Estratti[1]
ENDIF
END
Giusto? ???
io scriverei cosi:
PUBLIC SUB Button1_Click()
DIM Estratti AS NEW Array[2]
IF RadioButton1.Value = TRUE THEN
Label1.Text = cInt(Rnd(1, 91))
ELSE IF RadioButton2.Value = TRUE THEN
DO
Estratti[0] = cInt(Rnd(1, 91))
Estratti[1] = cint(Rnd(1, 91))
LOOP UNTIL Estratti[0] <> Estratti[1]
Label1.Text = Estratti[0]
Label2.Text = Estratti[1]
ENDIF
END
la dichiarazione delle variabili viene eseguita una volta sola ad inizio funzione
se dichiari una variabile come pubblica è bene non dichiarare un altra variabile con lo stesso nome di tipo privato