Hallo Leute, allen ein frohes Osterfest!
Ich hänge in meinem Projekt an einem Problem fest, das ich mit dem nachfolgenden Beispiel verdeutlichen möchte. Eine Zahl wird über zwei Button hoch- bzw. runtergezählt:
Wird ein Button länger gedrückt, so startet ein Timer, der automatisch weiter zählt. Lasse ich den Button danach wieder los, so wird in der Sub ButtonHochRunter_Up der entsprechende Button gesperrt, falls Null oder der Maximalwert erreicht ist. Das Problem ist, dass der Button in diesem Fall in gedrückter Form verharrt:
Ich habe es schon mit DoEvents und mit Invalidate versucht - beides bringt aber nichts. Kann mir da jemand weiterhelfen?
Hier der Code:
und hier noch mal das gesamte Beispiel:
Ich hänge in meinem Projekt an einem Problem fest, das ich mit dem nachfolgenden Beispiel verdeutlichen möchte. Eine Zahl wird über zwei Button hoch- bzw. runtergezählt:
Wird ein Button länger gedrückt, so startet ein Timer, der automatisch weiter zählt. Lasse ich den Button danach wieder los, so wird in der Sub ButtonHochRunter_Up der entsprechende Button gesperrt, falls Null oder der Maximalwert erreicht ist. Das Problem ist, dass der Button in diesem Fall in gedrückter Form verharrt:
Ich habe es schon mit DoEvents und mit Invalidate versucht - beides bringt aber nichts. Kann mir da jemand weiterhelfen?
Hier der Code:
B4X:
Sub ButtonHochRunter_Up
Timer1.Enabled = False
DoEvents ' bringt nichts!
ButtonRunter.Invalidate ' bringt nichts!
ButtonHoch.Invalidate ' bringt nichts!
If Zahl < 1 Then ButtonRunter.Enabled = False Else ButtonRunter.Enabled = True
If Zahl < ZahlMax Then ButtonHoch.Enabled = True Else ButtonHoch.Enabled = False
End Sub
und hier noch mal das gesamte Beispiel:
B4X:
'Activity module
Sub Process_Globals
Dim Timer1 As Timer
Timer1.Initialize("Timer1", 100)
Dim Zahl, ZahlMax As Int
Dim TimerArt As String
End Sub
Sub Globals
Dim ButtonHoch, ButtonRunter As Button
Dim Label1 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout01") 'Controls laden
Zahl = 0
ZahlMax = 10
Label1.Text = Zahl
ButtonRunter.Enabled = False
End Sub
Sub Timer1_Tick()
Select TimerArt
Case "Hoch"
If Zahl < ZahlMax Then
Zahl = Zahl +1
Label1.Text = Zahl
End If
Case "Runter"
If Zahl > 0 Then
Zahl = Zahl -1
Label1.Text = Zahl
End If
End Select
End Sub
Sub ButtonHochRunter_Up
Timer1.Enabled = False
DoEvents ' bringt nichts!
ButtonRunter.Invalidate ' bringt nichts!
ButtonHoch.Invalidate ' bringt nichts!
If Zahl < 1 Then ButtonRunter.Enabled = False Else ButtonRunter.Enabled = True
If Zahl < ZahlMax Then ButtonHoch.Enabled = True Else ButtonHoch.Enabled = False
End Sub
Sub ButtonHochRunter_LongClick
Dim B As Button
B = Sender
TimerArt = B.Tag
Timer1.Enabled = True
End Sub
Sub ButtonHochRunter_Click
Dim B As Button
B = Sender
Dim x As Int
Select B.Tag
Case "Hoch"
If Zahl < ZahlMax Then
Zahl = Zahl +1
Label1.Text = Zahl
End If
Case "Runter"
If Zahl > 0 Then
Zahl = Zahl -1
Label1.Text = Zahl
End If
End Select
If Zahl < 1 Then ButtonRunter.Enabled = False Else ButtonRunter.Enabled = True
If Zahl < ZahlMax Then ButtonHoch.Enabled = True Else ButtonHoch.Enabled = False
End Sub