VariablenNamen in Schleife hochzäheln

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    VariablenNamen in Schleife hochzäheln

    Hallo,
    ich Zeichne mehere Rechtecke die sich nur durch X1 bis X9 unterscheiden. Das würde ich nun gerne in einer Schleife erledigen.


    'Punkt.DrawRectangle(stift, X1 - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    'Punkt.DrawRectangle(stift, X2 - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    'Punkt.DrawRectangle(stift, X3 - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    'Punkt.DrawRectangle(stift, X4 - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    'Punkt.DrawRectangle(stift, X5 - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    'Punkt.DrawRectangle(stift, X6 - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    'Punkt.DrawRectangle(stift, X7 - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    'Punkt.DrawRectangle(stift, X8 - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    'Punkt.DrawRectangle(stift, X9 - DiaFrontHalbe, YFront, DiaFront, DiaFront)

    Dieser Versuch endete kläglich.

    For I As Integer = 1 To 9
    Punkt.DrawRectangle(stift, (CInt("X" & I)) - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    Next

    Danke ?(

    titus55 schrieb:

    For I As Integer = 1 To 9
    Punkt.DrawRectangle(stift, (CInt("X" & I)) - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    Next


    Das ist so auch nicht ganz richtig, denn du überspringst das X1 und fängst beim 2ten an.
    Das ganze müsste wenn überhaupt so aussehen:

    VB.NET-Quellcode

    1. For I As Integer = 0 To 8
    2. Punkt.DrawRectangle(stift, (CInt("X" & I)) - DiaFrontHalbe, YFront, DiaFront, DiaFront)
    3. Next


    Edit: So kann es auch nicht funktionieren, denn du kannst keinen Variablen namen so zusammenstellen (glaub ich). Am besten machst du alle X Punkte in ein Array:

    VB.NET-Quellcode

    1. Dim XValues() As Integer = {X1,X2,X3 usw. bis 9 halt} 'Achtung hier halt die Werte reinschreiben die in deinem Fall X1 bis X9 haben, nicht X1 als Name selber
    2. For I As Integer = 0 To 8
    3. Punkt.DrawRectangle(stift, (XValues(I) - DiaFrontHalbe), YFront, DiaFront, DiaFront)
    4. Next


    So müsste es klappen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Killerjo96“ ()

    Artentus schrieb:

    Es geht schon, und zwar mit Reflection. Aber das wäre in diesem Fall vollkommen übertrieben, da ein Array die mit Abstand einfachste Lösung ist.


    Naja, das es geht wusste ich nicht, aber danke für die Information.

    titus55 schrieb:

    Hallo, das mit dem Array hat geklappt. Danke
    P.S. Schade das man keine VaiablenName hochzählen kann.
    ;) titus


    Freut mich das ich dir helfen konnte.
    Normalerweise braucht man sowas wie hochzählen von Variablennamen nicht, denn es gibt, wie du sieht einfachere Möglichkeiten dafür. ^^

    Viel Spass noch :thumbsup:

    ErfinderDesRades schrieb:

    Die Idee "VariablenNamen hochzählen" - ergibt im Grunde doch gar keinen Sinn.

    Ich kann mich dran erinnern, dass solche Gags in dBase möglich waren. War es wirklich dBase oder was anderes Altes unter DOS? Jedenfall konnte man da tatsächlich Sachen reinschreiben, die dann zur Laufzeit in entsprechende Variablennamen umgestöpselt wurden. War völlig irre, aber man konnte verrückte Sachen damit realisieren :D
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D
    nö, auch mit Reflection kann man aus einer Variable x keine Variable u machen.

    Die Idee selbst ist widersinnig, und zeugt von einer Verwechslung der Ebenen von Bezeichner und Bezeichnetem.
    Ein VariablenName ist ein Bezeichner, etwas, was der Programmierer in seinen Editor schreibt, womit er ein Code-Objekt bezeichnet.
    Zur Laufzeit gibts diese Bezeichner ühaupt nicht mehr, sondern zur Laufzeit agieren die bezeichneten Objekte.
    Ich meinte das so:

    VB.NET-Quellcode

    1. Public Class ReflectionTest
    2. Public Sub Test1
    3. End Sub
    4. Public Sub Test2
    5. End Sub
    6. Public Sub Test3
    7. End Sub
    8. End Class
    9. Public Sub DoTest
    10. Dim testType As Type = GetType(ReflectionTest)
    11. Dim obj As New ReflectionTest
    12. For i = 1 To 3
    13. testType.GetMethod("Test" & i, BindingFlags.Default).Invoke(obj, {})
    14. Next
    15. End Sub

    Damit bekommt man so ne Art "Hochzählen".
    ah, ja - haste recht.

    Und trotzdem ist die Idee widersinnig und eine Verwechslung von Bezeichner und Bezeichnetem.

    Allerdings - mit Reflection - kann man tatsächlich auch zur Laufzeit aus dem Bezeichnten noch auspuhlen, was der Programmierer damals in seinen Editor geschrieben hat.

    Reflection ist eh ein Sonderfall und eine Technologie, mit der man ungefähr alle Gesetzmäßigkeiten der OOP-Sprache VB.Net unterläuft.
    Um eben nicht iwelche Namen hochzählen zu müssen oder um geordnete Verhältnisst zu haben, wenn komplexe Berechnungen ablaufen, werden Arrays benutzt.
    Stellt Euch vor, Ihr müsstet eine Fouriertransformation programmieren und kämt mit geordneten Variablennamen.
    An einer Stelle ist da eine Bitreversion, da werden Bits von Indexen in ihrer Reihenfolge umgekehrt (32er Trafo, 5 wird zu 20: 00101 ==> 10100).
    Wie willst Du Das mit @ErfinderDesRades:' Vornamen machen: Eckard => drakcE ? Dürfte nicht funktionieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!