
Originariamente inviata da
kerberos5
Navigando qui e li ho trovato la soluzione non era così banale! la funzione che segue sfrutta il principio del mazzo di carte!
codice:
Public Function rndNumber() As Integer
Const N As Integer = 23 'ultimo numero generabile, intervallo (0...N)
Static X(0 To N) As Integer 'il vettore con i numeri casuali
Static pr As Integer 'l'indice progressivo del numero da restituire
Dim i As Integer, j As Integer, s As Integer, v As Integer
If pr = 0 Then
'e' la prima chiamata o abbiamo esaurito i numeri: inizializziamo!
For i = 1 To N
X(i) = i 'memorizziamo in X() i numeri, per ora in ordine...
Next
Randomize()
For v = 1 To 3 'numero di "smazzate" per mischiare per bene
For i = 1 To N 'il numero d'ordine i lo scambiamo...
j = Int(Rnd() * (N + 1)) ' con quello j, scelto a caso
s = X(i)
X(i) = X(j)
X(j) = s
Next 'per tutti i numeri nel "mazzo"
Next 'ripetiamo per il numero di "smazzate"
'OK, ora i numeri sono in ordine "casuale"
rndNumber = X(0) 'restituiamo il primo della lista
pr = 1 'l'indice del prossimo da restituire
Else
'ci sono ancora numeri disponibili, semplicemente restituiamo quello d'indice pr
rndNumber = X(pr)
pr = pr + 1 'aggiorniamo l'indice
If pr > N Then
'se abbiamo restituito l'ultimo, resettiamo pr per la successiva re-inizializzazione
pr = 0
End If
End If
End Function
P.S. Ora se volessi applicare la randomizzazione di 1 colore a delle label? mi spiego ho 20 label e randomicamente solo ad esempio 5 di queste devono colorarsi diversamente rispetto alle altre.... è fattibile?
grazie