German 10 EditText boxen über eine Zufallszahl ändern

wolfatwork

Member
Licensed User
Longtime User
Hi, ich habe 10 EditTextboxen und möchte nach dem Ziehen einer Zufallszahl zwischen 1 und 10 - die betrefffende Box in der Eigenschaft TextColor auf rot setzen.

Dazu setze ich den String "EditText" + gezogene Zahl zusammen und speichere sie in der Variablen ziehungsfeld. Doch das ist natürlich ein String und wenn ich dann versuche auf ziehungsfeld.textColor zuzugreifen kriege ich logischerweise ein Fehler. Aber ich weiss nicht, wie ich es anders machen kann. Kann ich den Objekttyp umwandeln?

Danke im Voraus.
 

wolfatwork

Member
Licensed User
Longtime User
Danke für die schnelle Antwort. Leider kriege ich es nicht hin...
Dim EditText(10) As EditText
For x = 1 To 10
EditText(x).text = x
Next

wenn ich dann darauf zugreife mit EditText(gezogeneZahl).textColor = 250 bekomme ich die Meldung "EditText [0=(EditText) not initialized, 1 ...
 

wolfatwork

Member
Licensed User
Longtime User
hallo Klaus - jetzt habe ich noch ein altes Posting von Dir gefunden mit einem ähnlichen Beispiel für Labels. Habe es abgewandelt...

Dim Feld(10) As EditText
Feld = Array As EditText (EditText1, EditText2,EditText3,EditText4,EditText5,EditText6,EditText7,EditText8,EditText9,EditText10)
For i = 0 To 9
Feld(i).Text = i
Next

Aber meine Werte in der Klammer setzt er schon in rot - d.h. er erkennt sie nicht. Aber die Boxen heissen wirklich so. Das layout wird auch geladen - ich kann es sehen und die Boxen sind vorhanden.
 

wolfatwork

Member
Licensed User
Longtime User
Hi, ja das Design wurde mit dem Designer erstellt und die Variablen sind in Sub Globals erstellt.
Die Idee hatte ich auch schon und habe die Deklaration in Activity_Create verschoben - hinter dem Einlesen der Activity.LoadLayout aber hat nix genutzt.
 

klaus

Expert
Licensed User
Longtime User
Das funktioniert:
B4X:
Sub Globals
    Dim EditText1, EditText2, EditText3, EditText4, EditText5, EditText6, EditText7, EditText8, EditText9, EditText10 As EditText
    Dim edtTest(10) As EditText
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("main")
   
    edtTest = Array As EditText(EditText1, EditText2, EditText3, EditText4, EditText5, EditText6, EditText7, EditText8, EditText9, EditText10)
   
    Dim i As Int
    For i = 0 To 9
        edtTest(i).Text = "Test " & i
    Next
End Sub
 

wolfatwork

Member
Licensed User
Longtime User
Vielen Dank! Geht Prima. Für ein Lottospiel brauche ich nun aber 49 Felder - da wird das viel Schreibarbeit. Daher habe ich das probiert:
Dim i As Int
Dim bez As String
For i = 0 To 48
bez = "EditText" & i
Dim bez As EditText
Next

aber so geht es nicht...gibt es eine andere Möglichkeit?
 

klaus

Expert
Licensed User
Longtime User
Du kannst die Views im Code einfügen.
Brauchst Du eignetlich EditTexts zum anzeigen.
Muss der Benutzer die Werte ändern können ?
Wenn nicht benutze Labels anstatt EditTexts.
Beispiel:
B4X:
Sub Globals
    Dim lblLotto(49) As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    InitLotto
End Sub

Sub InitLotto
    Dim i, r, s As Int
    Dim Breite = 40dip As Int
    Dim Spalte = 5dip + Breite As Int
  
    For r = 0 To 6
        For s = 0 To 6
            i = r * 7 + s
            lblLotto(i).Initialize("lblLotto")
            Activity.AddView(lblLotto(i), 5dip + s * Spalte, 5dip + r * Spalte, Breite, Breite)
            lblLotto(i).Color = Colors.White
            lblLotto(i).TextSize = 24
            lblLotto(i).Gravity = Gravity.CENTER
            lblLotto(i).TextColor = Colors.Black
            lblLotto(i).Text = i + 1
        Next
    Next
End Sub
 

wolfatwork

Member
Licensed User
Longtime User
Danke - wollte, dass der User einige Zahlen von Hand picken kann - aber Label reichen wahrscheinlich aus. Habe Dein Code ausprobiert, werde es heute Abend noch etwas kleiner machen und schauen ob es so nicht besser ist. Vielen Dank an dieser Stelle !
 

klaus

Expert
Licensed User
Longtime User
Danke - wollte, dass der User einige Zahlen von Hand picken kann
Was meinst Du hier mit picken?
EditTexts sind nützlich wenn der Nenutzer den Text, also die Zahlen, ändern soll.
Ich nehme an dass diese immer die gleichen bleiben.
Falls Du Zahlen wählen willst hast Du das Click Event von den Labels.
B4X:
Sub lblLotto_Click
    Dim lbl As Label
    Dim Zahl As Int

    lbl = Sender
    Zahl = lbl.Text
End Sub

Im Code von Post#9 kannst Du auch die Labels durch EditTexts ersetzen,
 
Last edited:

wolfatwork

Member
Licensed User
Longtime User
ja, mit Labels ist es optisch schöner und geht auch noch kleiner. Die Basicfunktionen gehen jetzt und nun muß ich es noch etwas aufpeppen und anfleischen...Nochmals Danke und Pfüati
 

Knoppi

Active Member
Licensed User
Longtime User
@klaus

vielen Dank für Deinen Post #7
denn das das funktioniert war mir nicht klar.
B4X:
edtTest = Array As EditText(EditText1, EditText2, EditText3, EditText4, EditText5, EditText6, EditText7, EditText8, EditText9, EditText10)

viele Grüße
Knoppi
 
Top