[VB.NET] - Variablen in schleife Werte zuweisen

waswiewo

Erfahrenes Mitglied
Hi Leute,

Wenn ich z.B. 4 TextBoxen ihre Werte zuweisen Will, dann mach ich das ja so:

Code:
For i = 1 to 4 
if me.controls("TextBox" & i).Text = CStr(Variabel)
Next

Jetzt Will ich aber den MAX-Wert von Variablen herausfinden, die alle den selben Anfang im variablen-Namen (leg_1, leg_2, ... usw) haben. Zuvor möchte ich gern die Variablen in eine "New List(Of Integer)" packen.

Wie geht denn das nun? Mit dem folgenden Code hat es nicht geklappt:

Code:
        Dim Werte As New List(Of Integer)

        For i = 1 To 4

            Werte.Add("leg_" & i)

        Next

Gibt es da sowas wie nen RessourcenManager-für-Variablen? Sodass ich ds irgendwie so schreiben kann:

Code:
Werte.Add(variablenManager("leg_" & i))

Ich hab schon gesucht wie nen bekloppter, finde aber nicht die passende Funktion.
 
Du kannst in .Net nur über Umwege die Felder eines Objektes durchlaufen und deren Werte anfordert (Stichwort: Reflection)

Deine List(Of Integer) funktionierte nicht weil du im einen einfach string zuweisen wolltest.

Und der RessourcenManager verwirrt mich nun wieder.
Was genau hast du vor?
 
Hi!

Bei der List(Of Integer) hab ich es auch gemerkt mit dem String :D

Was ich mit dem RessourcenManager meine:

Für alle meine Ressourcen habe ich ja genau diesen, um variabel auf meine Ressourcen zugreifen zu können

Beispiel:

Code:
Dim Bla() as BLA

For i = 0 to IRGENDWAS

    Bla.add(My.Resources.ResourceManager("Datei" & i))

Next

Dies funktioniert, wenn man Dateien hat die "Datei0, Datei1, Datei2, ... usw" heißen.

Ich möchte genau so - mit einer Schleife - auf meine Variablen zugreifen! Damit ich nicht den Wert jeder einzelnen einzeln in die Liste aufnehmen muss.

Beispiel - so wie ich es gerne hätte: ^^

Code:
' Die Variablen heißen beispielsweise: Var0, Var1, Var2, usw UND werden als Public
' deklariert, da ich von verschiedenen Formen drauf zurückgreife.

Dim Bla() as BLA ' Liste mit den Werten der Variablen, die ich mit der Schleife herausfinden möchte

For i = 0 to IRGENDWAS

    Bla.add(My.Variablen.VariablenManager("Var" & i))

Next

Und so möchte ich es nicht machen:

Code:
Bla.add(Var0)
Bla.add(Var1)
.
.
.
Bla.add(Var47)
.
.
.
usw

Ich hab es z.Z. so:

Code:
Dim Bla%() = {Var0, Var1, Var2, Var3, ... usw}

Evtl verstehst du jetzt mein Anliegen^^
 
Zuletzt bearbeitet:
Naja immernoch nicht wirklich.
Zuerst wollte ich dir zu Verwendung von Dictionary raten.
Deshalb jetzt kurz ein Auszug aus dem was ich zu schreiben wollt:
Mit dem könntest du Werte mit einem speziellen Schlüssel / Namen ablegen.
Funktioniert ähnlich wie ein Array oder eine Liste nur das du einen Namen hast über diesen du deinen Wert anforderst.

Bin mir nur nicht sicher ob das Dictionary wirklich aushilft.
 
Mir ist spontan auch das von Spyke genannte Dictionary eingefallen. Aber, so wie du schreibst waswiewo, klingt es eher so als würdest du das Rad neu erfinden wollen, weil du noch nicht genügend Programmier-Erfahrung hast. Deswegen meine Frage: Warum willst du das machen, was du oben beschrieben hast, waswiewo?
 
Ich glaub ich hab in dem Moment einfach nicht wirklich selbst gepeilt, was ich schreibe^^

Ich hab jetzt alles Mit Arrays() & ArraysInArray()() gelöst.

Es war für ein Spiel gedacht, wo jeder Spieler die Selben Variablen hat. Spieler 1 hat z.B. Punkte01, Spieler 2 hat Punkte02, usw..

Und da dachte ich ... ich habe auch Ressourcen, die von Sound001 bis Sound180 gehen. Diese spreche ich mit dem RessourcenManager in einer Schleife an ( RessourcenManager("Sound" und i) ).

Und jetzt kommt meine Überlegung. Die variablen auch in einer Schleife VARIABEL anzusprechen.

Beispiel:

...("Punkte" & i)

Und das scheint nicht - oder nur über dieses von euch erwähnte 'Dictionary' - zu funktionieren. Also hab ich alle Spielerdaten in Arrays geballert. Array$()() = {New String() {Punkte, Bla, Blub, Ergebnis, usw, etc}, ..., ..., ...}

Funktioniert einwandfrei.

Ps: Ja, du hast Recht, ich bin noch kein Profi-Programmierer ;)
 
OK, ich glaub das ist nicht meine Woche, so ganz versteh ichs immer noch nicht :D
(Oder ich sollte es nicht immer so spät lesen ^^)

Aber das wichtigste ist ja eh, finde ich, vorallem für den Anfang, das du es selbst schaffst Lösungswege zu finden, das gibt immer son schönen aha Effekt ;)
 
Hm.... ich will dir mal zeigen, wie ich es (ungefähr) machen würde. Du hast da zum Beispiel die Variable "Punkte". Ich nehme an, das ist eine Zahl und kein Text? Wenn ja, dann solltest du sie auch als solche abspeichern und nicht als String.
Am besten erstellst du eine Klasse, die alle Informationen über einen Spieler abspeichert. Das könnte zum Beispiel so aussehen:
Code:
Public Class Spielerdaten
    ''' <summary>
    ''' Der Nickname des Spielers
    ''' </summary>
    Public Property Name As String

    ''' <summary>
    ''' Ein Punktestand. Kann ganzzahlige positive und negative Werte annehmen
    ''' </summary>
    Public Property Punkte As Integer

    ''' <summary>
    ''' Anderer Punktestand. Kann nur ganzzahlige positive Werte annehmen
    ''' </summary>
    Public Property NurPositivePunkte As UInteger

    ''' <summary>
    ''' Ergebnis des Spielers. Kann reelle Werte (Zahlen mit Nachkommastellen) annehmen
    ''' </summary>
    Public Property Ergebnis As Double
End Class
Hier wird der Punktestand als Integer gespeichert (nur Zahlen, kein Text), das Ergebnis als Double (Zahlen mit Nachkommastellen) und lediglich die Name-Eigenschaft ist vom Typ String.
Jetzt kannst du "Spielerdaten"-Objekte erstellen:
Code:
Dim Spieler1 As New Spielerdaten
Spieler1.Ergebnis = -1.337
Spieler1.Name = "Karl der Große"
Spieler1.Punkte = -5
Spieler1.NurPositivePunkte = 4

Dim Spieler2 As New Spielerdaten
Spieler2.Ergebnis = Math.PI
Spieler2.Name = "Karl der Kleine"
Spieler2.Punkte = Spieler1.Punkte * 2
Spieler2.NurPositivePunkte = UInteger.MaxValue
Du kannst natürlich auch ein Array erstellen, oder eine Liste (Liste erscheint mir hier sinnvoller):
Code:
Dim AlleSpielerListe As New List(Of Spielerdaten)
AlleSpielerListe.Add(Spieler1)
AlleSpielerListe.Add(Spieler2)
Die Klasse Spielerdaten speicherst du am Besten in einer eigenen Datei ab.
 
Zurück