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?
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.
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.
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
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?
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
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 !
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,
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