German Label(5) im Sub-Aufruf abfragen

strupp01

Active Member
Licensed User
Longtime User
Ich möchte 9 Label oder EditText-Felder auf ein ScrollView plazieren. Um sie nicht alle mit anderem Namen zu belegen gebe ich sie in einem For...Next Loop ein:

Dim Test(10) as Label

Nach initialisieren und platzieren z.B.

For i = 1 to 9
ScrollView1.Panel.add(Test(i), 35%x, ((i-1)*50dip)+10dip, 30%x, 40dip)
Next

möchte ich beim anklicken der einzelnen Label unterschiedliche Aktionen ausführen (z. B. separates Feld mit Texteingabe bzw. Datumsauswahl)

Wie muss mein Sub-Aufruf aussehen, um auf die einzelnen Label Test(1) bis Test(9) die unterschiedlichen Aktionen zu starten ?

Sub Test_Click---> Funktioniert zwar, aber auf alle und nicht ein spezielles Label
Sub Test_ItemClick(Position As Int, Value As Object)---> Fehler

Wer kann helfen ?
 

klaus

Expert
Licensed User
Longtime User
1. Du hast Dim Test(10) as Label.
Das heisst 10 Labels, und dann hast Du For i = 1 to 9, warum?
Alle Listen beginnen mit 0, das heisst dass Du in Deinem Code Test(0) nicht benutzt.

2. In Deinem Code fehlt Initialize.

B4X:
For i = 0 to 9
    Test(i).Initialize("lblTest")
    Test(i).Tag = i
    ScrollView1.Panel.add(Test(i), 35%x, ((i-1)*50dip)+10dip, 30%x, 40dip)
Next

3. Dann um zu wissen welches Label angeklickt wurde brauchst Du eine Referenz, diese kann man in Test(i).Tag eingeben.

4. Dann hast Du das Click Event, in diesem Fall ist der Name "lblTest" den ich in Test(i).Initialize("lblTest") eingegeben habe.

B4X:
Private Sub lblTest_Click
    Private lbl As Label
    Private Index As Int

    lbl = Sender  'Sender ist die View welche das Event erzeugt hat
    Index = lbl.Tag  'hier  weisst Du welches Label das Event erzeugt hat
    Select Index
        Case 0
            ' Code für Test(0)
        Case 1
            ' Code für Test(1)
        Case 2
       usw
   End Select
End Sub
 

strupp01

Active Member
Licensed User
Longtime User
Hallo Klaus,
Danke für deine Antwort. Das initialisieren hat ich im Text erwähnt und daher nicht aufgeführt.
Das mit dem nicht benutzen von Test(0) mache ich immer so. Tick von mir.
Das mit Test(i).Tag werde ich einbauen. Bin sicher, es funktioniert.
Danke für deine Hilfe und einen schönen Tag.
 
Top