Cari amici, sto impazzendo con un comportamento per me del tutto incomprensibile. Mi spego:
Genero da codice un array di labels e con un timer ("cadenza"), caricato con valori random, determino il background ("stimolo") di una di queste labels (random anche questa).
Ad ogni scatto del timer "cadenza" cambio in modo random la label cui imposto il backgroud.
Quando carico il background "stimolo" su una label faccio partire un secondo timer ("durata") caricato con un valore fisso il quale dovrebbe, alla sua scadenza, azzerarmi ("bianco") il backgroud della stessa label.
Vado quindi ad intercettare il click sulle labels e se questo è avvenuto sulla label con lo "stimolo" incremento un contatore e sbianco il background della label cliccata.
Tutto questo funziona non fosse che, anche se clicco sulla label giusta entro il tempo che precede lo scatto del timer "durata", se attivo lo sbiancamento della label dal timer "durata" non intercetto più il click sulla label stessa.
Non capisco più nulla. Ho provato diverse soluzioni ma il risultato non cambia. E' come se il timer "durata" arrivasse comunque prima dell'evento click sulle label.
Mi sembra anche abbastanza assurdo che non si possa puntare ad una label in un array con il suo identificativo (es. label(3)) senza passare dal sender così come non sia possibile creare le labels nel designer per poi farvi riferimento generando una stringa con il suo nome (es stringa = label3) ma questo è un altro discorso.
Di seguito il mio codice nella speranza che qualche anima pia possa illuminarmi.
Vi ringrazio in anticipo e mi scuso per la mia ignoranza
Pier
Genero da codice un array di labels e con un timer ("cadenza"), caricato con valori random, determino il background ("stimolo") di una di queste labels (random anche questa).
Ad ogni scatto del timer "cadenza" cambio in modo random la label cui imposto il backgroud.
Quando carico il background "stimolo" su una label faccio partire un secondo timer ("durata") caricato con un valore fisso il quale dovrebbe, alla sua scadenza, azzerarmi ("bianco") il backgroud della stessa label.
Vado quindi ad intercettare il click sulle labels e se questo è avvenuto sulla label con lo "stimolo" incremento un contatore e sbianco il background della label cliccata.
Tutto questo funziona non fosse che, anche se clicco sulla label giusta entro il tempo che precede lo scatto del timer "durata", se attivo lo sbiancamento della label dal timer "durata" non intercetto più il click sulla label stessa.
Non capisco più nulla. Ho provato diverse soluzioni ma il risultato non cambia. E' come se il timer "durata" arrivasse comunque prima dell'evento click sulle label.
Mi sembra anche abbastanza assurdo che non si possa puntare ad una label in un array con il suo identificativo (es. label(3)) senza passare dal sender così come non sia possibile creare le labels nel designer per poi farvi riferimento generando una stringa con il suo nome (es stringa = label3) ma questo è un altro discorso.
Di seguito il mio codice nella speranza che qualche anima pia possa illuminarmi.
code:
#Region Module Attributes
#FullScreen: False
#IncludeTitle: False
#ApplicationLabel: prova
#VersionCode: 1
#VersionName:
#SupportedOrientations: portrait
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: false
#End Region
'Activity module
Sub Process_Globals
Private eventoTimer As Timer 'x cadenza stimolo
Private durataTimer As Timer 'x durata stimolo
End Sub
Sub Globals
Private Label(9) As Label 'array x stimolo
Private Label10 As Label 'x risultato
Private stimolo As BitmapDrawable
Private bianco As BitmapDrawable
Private intervallo As Int
Private casella As Byte
Private contaok As Int = 0
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("1b")
eventoTimer.Enabled = False 'stop di sicurezza x timer stimolo
durataTimer.Initialize("durataTimer", 500) 'inizializzo timer x durata stimolo
durataTimer.Enabled = False 'stop x timer durata stimolo
stimolo.Initialize(LoadBitmap(File.DirAssets, "stimolo.png")) 'carico lo stimolo
bianco.Initialize(LoadBitmap(File.DirAssets, "bianco.png")) 'carico il bianco
Dim i As Int
Dim increm As Int
For i = 0 To 8
Label(i).Initialize("Label")
If i < 3 Then 'per label 0,1,2
increm = i * 32%x
Activity.AddView(Label(i), 2%x + increm , 20%y, 32%x, 46%x)
Label(i).Tag = i + 1
End If
If i > 2 And i <6 Then 'per label 3,4,5
increm = (i-3) * 32%x
Activity.AddView(Label(i), 2%x + increm , 20%y + 46%x, 32%x, 46%x)
Label(i).Tag = i + 1
End If
If i > 5 Then 'per label 6,7,8
increm= (i-6) * 32%x
Activity.AddView(Label(i), 2%x + increm , 20%y + 92%x, 32%x, 46%x)
Label(i).Tag = i + 1
End If
Next
eventoTimer_Tick
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub eventoTimer_Tick
eventoTimer.Enabled = False
casella = Rnd(0,9)
Label(casella).enabled = True
Label(casella).Background = stimolo 'mette lo stimolo in casella (label) random
durataTimer.Enabled = True 'attivo timer durata stimolo
End Sub
Sub durataTimer_Tick
durataTimer.Enabled = False
Label(casella).Background = bianco 'sbianco casella stimolo
'Label(casella).Enabled = False 'questo inibisce il riconoscimento della label_click xchè la disabilita troppo presto!!!!!
'casella = -1 'tentativo inutile di usare altra strada!!!!!!!!!!!!!!
intervallo = Rnd(1000,5000) 'calcolo cadenza stimolo random
eventoTimer.Initialize("eventoTimer", intervallo) 'inizializzo timer x lo stimolo con tempo random
eventoTimer.Enabled = True 'attivo timer stimolo
End Sub
Sub Label_Click
Dim Send As Label
Send = Sender
Select Case Send.Tag
Case 1
'If Label(casella).Background = stimolo Then 'provato non risolve
If casella = 0 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
Case 2
'If Label(casella).Background = stimolo Then provato non risolve
If casella = 1 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
Case 3
'If Label(casella).Background = stimolo Then provato non risolve
If casella = 2 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
Case 4
'If Label(casella).Background = stimolo Then provato non risolve
If casella = 3 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
Case 5
'If Label(casella).Background = stimolo Then provato non risolve
If casella = 4 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
Case 6
'If Label(casella).Background = stimolo Then provato non risolve
If casella = 5 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
Case 7
'If Label(casella).Background = stimolo Then provato non risolve
If casella = 6 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
Case 8
'If Label(casella).Background = stimolo Then provato non risolve
If casella = 7 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
Case 9
'If Label(casella).Background = stimolo Then provato non risolve
If casella = 8 Then
contaok = contaok + 1 'se c'era la stimolo in questa casella incrementa contatore ok
Label10.Text = "ok = " & contaok 'e lo visualizza
Label(casella).Background= bianco 'qui svuota la casella stimolo
Label(casella).Enabled = False 'disattiva la casella stimolo x evitare conteggi plurimi
End If
End Select
End Sub
Vi ringrazio in anticipo e mi scuso per la mia ignoranza
Pier