
Originariamente inviata da
renygade
Ciao
A parte che hai scritto codice assolutamente ridondante.. Non sai che si può accede a ogni singolo controllo contenuto nel form con un index? Questo permette di ciclarli e fare le dovute operazioni senza scrivere tutto quel codice.
Al di la di ciò, per evitare doppi dovresti fare la verifica man mano che crei la stringa random.
Un modo potrebbe essere quello di creare un array con le lettere ad esempio, estrai un index, "peschi" una lettera dall'array e poi elimini quel item dall'array. In questo modo sarà impossibile che ti esca random di nuovo quella lettera.. Non so se mi sono spiegato.. Un po come con il sacchetto dei numeri della tombola. Estrazione casuale senza ripetizione..
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