Newsgroup: it.comp.lang.visual-basic
Titolo: casualita'

ciao a tutti,
il mio problema e' questo,in un form ho 10 oggetti label indicizzati con il
nome l(index) dove la proprieta' backcolor e'
impostata sul grigio e vorrei fare in modo che con un commandbutton  4 di
questi oggetti label diventino di colore
rosso in maniera casuale,io ho provato usare l'istruzione(RANDOMIZE  e RND)
ma il colore lo cambiano tutti gli oggetti,come posso fare?
qualcuno puo' farmi un'esempio? grazie
ciao a tutti.

 wrote in message
8uc2cf$jpj$1...@lacerta.tiscalinet.it...


 Dim a, b, c, d As Integer
Attenzione - stacchetto pubblicitario:
Sub Prova()
     Dim a, b, c, d As Integer
     Debug.Print "a e' " & TypeName(a)
     Debug.Print "b e' " & TypeName(b)
     Debug.Print "c e' " & TypeName(c)
     Debug.Print "d e' " & TypeName(d)
End Sub
Output window:
a e' Empty
b e' Empty
c e' Empty
d e' Integer
Empty significa che e' un variant vuoto.
Purtroppo in vb non e' come in altri linguaggi in cui le variabili
dichiarate assieme condividono il tipo, come ad es. in C:
int a, b, c ;        // tre variabili int
char d, e ;        // tre variabili char
Cio' e' causa di bug a volte solo apparentemente inspiegabili.
Ciao
Aldo


 char d, e ;        // tre variabili char
tre ?
( noi db-amministratori tendiamo a essere un po' pignoli :)

 wrote in message
news:8uci5e$1i2gc$1...@ID-51318.news.dfncis.de...

Sai com'e', l' occhio del padrone ingrassa il cavallo ...

Hai Provato a prendere a caso un numero di indice e renderlo rosso.
Mi spiego con del codice:
Randomize
Dim a As Integer
a = Int(Rnd * 10)
label1(a).backcolor=&HFF&
Ciao
Ivan

 Dim a, b, c, d As Integer
Beccato!!!!!!            Ebbene si, ammetto l'errore.
Come hobbista principiante mi ritengo in parte scusato  : )  : )   : )
A proposito, l'output sulla finestra di debug non č proprio cosě, in effetti
la prima variabile (a) č un integer...
visto cosě, ho solo sbagliato per 1/4   : )  : )
Scherzi a parte, secondo voi come si potrebbe evitare l'utilizzo dei "goto"
?
Ad esempio io riempirei una matrice e la paragonerei con le corrispondenti
label.
Sarebbe meglio o peggio?
Altri sistemi?
Mi interesserebbe molto vedere come programmano gli esperti (per davvero,
non vi sto prendendo in giro)
Ciao e grazie per gli eventuali esempi.
Fob

 non vi sto prendendo in giro)
Passo la palla ...


 (per davvero, non vi sto prendendo in giro)
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 il mio problema e' questo,in un form ho 10 oggetti label indicizzati con
il nome l(index) dove la proprieta' backcolor e' impostata sul grigio e
vorrei fare in modo che con un commandbutton  4 di questi oggetti label
diventino di colore rosso in maniera casuale,io ho provato usare
l'istruzione(RANDOMIZE  e RND) ma il colore lo cambiano tutti gli
oggetti,come posso fare?
Un modo potrebbe essere questo:
Option Explicit
Private Sub Command1_Click()
  Dim lngTimes As Long
  Dim i        As Long
  Dim strTemp  As String
  Dim lngRnd   As Long
  lngTimes = 4
  For i = Label1.LBound To Label1.uBound
    Label1(i).BackColor = vbBlack
    strTemp = strTemp & Format$(i + 1, "00")
  Next
  Randomize
  For i = 0 To lngTimes - 1
    lngRnd = Int(((Len(strTemp) \ 2)) * Rnd + 1) * 2 - 1
    Label1(Mid$(strTemp, lngRnd, 2) - 1).BackColor = vbRed
    strTemp _
      = Left$(strTemp, lngRnd - 1) _
      & Mid$(strTemp, lngRnd + 2)
  Next
End Sub
Private Sub Form_Load()
  Dim i As Long
  For i = 0 To 9
    If i Then
      Load Label1(i)
      With Label1(i - 1)
        Call Label1(i).Move( _
            .Left _
          , .Top + .Height + Screen.TwipsPerPixelY)
      End With
    Else
      With Screen
        Label1(i).Move .TwipsPerPixelX, .TwipsPerPixelY
      End With
    End If
    With Label1(i)
      .Caption = ""
      .BackColor = vbBlack
      .Visible = True
    End With
  Next
End Sub


Questo si che è un sistema tosto, in questo caso esegui il loop solo il
numero necessario di volte senza ripetizioni (e senza utilizzare i goto)!
PS
Ho impiegato qualche minuto a capire come funziona ma ne è valsa la pena...
Ciao
Fob


 Ho impiegato qualche minuto a capire come funziona ma ne è valsa la
pena...
--



Premetto che non sono un esperto, ma mi piace cimentarmi in questi problemi.
Io farei cosě:
Sub CambiaColoreLabel()
    Dim r%, Indici$, dado%
    For r = Label1.LBound To Label1.UBound  'per generalizzare
        Indici = Indici & Chr$(r) 'cosě puoi inserire anche 256 label
        Label1(r).BackColor = &H8000000F
    Next r
    For r = 1 To 4
        'estraggo un numero compreso tra 1 e Len(Indici)
        dado = Int(Rnd * Len(Indici)) + 1
        Label1(Asc(Mid$(Indici, dado, 1))).BackColor = 255  'colore rosso
        'elimino l'indice estratto dalla stringa indici
        Indici = Left$(Indici, dado - 1) & Right$(Indici, Len(Indici) -
dado)
    Next r
End Sub
Ciao,
    Silvio.


Ho appena mandato un mio esempio, ma non lo vedo tra le risposte.
Siccome questo problema mi capita spesso, se riesci a leggere la mia
risposta potresti rispondere (sempre sul NG) per darmi una conferma?
Grazie.
Ciao, Silvio


Ricevuto!!!
Utilizzi lo stesso algoritmo proposto da Maurizio Borrelli ma con la
variante del CHR$ (lui dedicava più posizioni nella stringa)
Complimenti comunque per la tua soluzione
Ciao
Fob

 Complimenti comunque per la tua soluzione
--



Ciao,
Silvio