Funktion für mehrere Variablen durchlaufen lassen

  • VB.NET

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

    Funktion für mehrere Variablen durchlaufen lassen

    Hallo,
    ich habe eine sehr lange Funktion geschrieben. Nun möchte ich diese für meine 10 Variablen, die damit behandelt werden sollen nicht jedes mal kopieren. Wie kann ich nun sozusagen eine Variable erstellen, die sozusagen immer eine andere variable einsetzt?

    Mal ein beispiel an einer mini-funktion

    If Variable1 = XXX then
    XXX

    Jetzt möchte ich aber Variable1 durch Variable 2 ersetzen. Sozusagen eine Variable für variablen erstellen :D

    If variableX = XXX then
    XXX

    Ich bin mir sicher, dass ich so etwas schon einmal gemacht habe, ich weiß nur nicht mehr wann, auf welcher Festplatte und wie :D

    Da ich keinen wirklichen Stichpunkt für mein Problem finde, bin ich beim googlen nicht wirklich erfolgreich geworden.

    Würde mich über hilfe freuen..
    Indem du die Variable mit dem du die function aufrufen willst im Kopf übergibst?

    VB.NET-Quellcode

    1. private function (lokaleVariable as wasDuwillstTyp) as deinTyp
    2. 'dein Code
    3. end function

    aufruf dann mit

    VB.NET-Quellcode

    1. if function(aktuelleVariable) ....

    oder hab ichs falsch verstanden?
    Hi,
    FloFuchs hat mir nen kräftigen Denkanstoß gegeben :D

    Ich habe es mal klein zum testen aufgebaut.

    Erst einmal die Funktion gestellt :

    VB.NET-Quellcode

    1. Function Convertieren()
    2. If variable = "a" Then
    3. cvariable = "22"
    4. ElseIf variable = "b" Then
    5. cvariable = "44"
    6. End If
    7. End Function


    Und dann kann ich es so für jede Variable verwenden:

    VB.NET-Quellcode

    1. variable = zeichen1
    2. Convertieren()
    3. czeichen1 = cvariable
    4. variable = zeichen2
    5. Convertieren()
    6. czeichen2 = cvariable


    zeichen1 ist das erste zeiechen (also 0) aus einer Textbox und zeichen 2 das zweite (also 1)
    Die lasse ich vorher in die variable auslesen.
    Dann lade ich den wert von zeichen 1 in variable (die in der funktion steht) und lasse das ganze umformen (Funktion Convertieren).
    Dann lade ich das umgeforme (also cvariable in die variable für das gesuchte zeichen, also czeichen).
    Und so mache ich das mit jedem zeichen.

    Ich glaube zwar zu wissen, dass man das mit einer schleife viel einfacher machen kann, aber so funktioniert es auch :)

    Jetzt muss ich es nur noch an meine viel größere funktion anpassen.

    Vielen Dank für eure Hilfe.
    Ich würde das ganze auch mittels array machen, vllt die daten schon im vornherein in einem array speichern statt in einzel-variablen (v1,v2,v3,..)...
    Dann wäre eine ListOf evtl sogar besser

    VB.NET-Quellcode

    1. Dim v1 As Integer = 10
    2. Dim v2 As Integer = 33
    3. Dim v3 As Integer = 4523
    4. For Each v As Integer In New Integer() {v1, v2, v3}
    5. MsgBox(v.ToString)
    6. Next



    edit: statt der msgbox könnte hier deine funktion aufgerufen werden. das erspart viel schreiberei..
    BTW: Funktionen geben normalerweise einen wert zurück:

    VB.NET-Quellcode

    1. Function Verdoppeln (byval zahl as integer) as integer
    2. return zahl*2
    3. end function


    Aufgerufen wird die funktion dann so:

    VB.NET-Quellcode

    1. dim a as integer = 0
    2. a = verdoppeln(7)


    du siehst, dass der funktion ein wert übergeben werden kann, so brauchst du keine externe variable zu deklarieren. Hat den vorteil, dass dein code sauber bleibt und von außen niemand die funktionsweise der funktion beeinträchtigen kann. Wenn deine Funktion keinen wert zurückgeben soll, solltest du einen "sub" verwenden

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FreakJNS“ ()

    Ich verstehe aber nicht, wie ich die Lösung von Flo bei mir anwenden kann (zum beispiel mit dem mini-aufbau von oben). Vor allem das If beim Aufrufen irritiert mich.

    Aus function habe ich jetzt mal sub gemacht, da wie du sagst es ja gar keine funktion ist.

    Die Lösung von Flo interessiert mich aber trotzdem noch.

    Tim B. schrieb:


    VB.NET-Quellcode

    1. variable = zeichen1
    2. Convertieren()
    3. czeichen1 = cvariable



    Wird zu


    czeichen1 = Convertieren(zeichen1)

    Wobei die Funktion dann in etwas so aussieht:

    VB.NET-Quellcode

    1. Public Function Convertieren(byval zeichen as string) as string
    2. select case zeichen
    3. case "A"
    4. return "2"
    5. case "B"
    6. return "4"
    7. case else
    8. return "foo!"
    9. End Function


    Das ganze geht noch deutlich schöner, aber zumindest "Parameterübergabe" und "Rückgabewert" solltest du DRINGEND verstehen ...
    das if beim aufrufen hatte nur was damit zu tun dass du ja eine function haben wolltest, die hat einen rückgabewert, mit dem musst du ja was tun... (zum Beispiel in einer if..SChleife prüfen.)
    zurück zu deinem Beispiel... lass halt einfach die ganzen zwischenschritte weg...
    wozu

    VB.NET-Quellcode

    1. variable = zeichen1
    2. Convertieren()
    3. variable = zeichen2
    4. Convertieren()

    wenn ich direkt

    VB.NET-Quellcode

    1. convertieren(zeichen1)
    2. convertieren(zeichen2)

    sagen kann?


    ...da war die böse Maus mal wieder schneller ;)
    :cursing: Ich könnte ausrasten, wenn ich sehe wie einfach und eigentlich auch logisch es ist und ich nicht drauf gekommen bin :thumbdown:

    Ich danke euch vielmals, ich werde das noch ein paar mal üben und dann in meine Funktion einbauen, damit ich es auch richtig verstehe.


    Hab das ganze nochmal an nem Beispiel geübt :

    2 Buttons, 1 Label. Bei Button 1 wird zahl1 mal 20 genommen und bei button2 zahl2 mal 20.

    Zwar nicht das Einfallsreicheste aber naja :P

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim zahl1 As Integer
    3. Dim zahl2 As Integer
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. zahl1 = 5
    6. zahl2 = 6
    7. End Sub
    8. Private Function zahl(ByVal zahll As Integer) As Integer
    9. Select Case zahll
    10. Case zahll
    11. Return zahll * 20
    12. End Select
    13. End Function
    14. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    15. Label1.Text = zahl(zahl1)
    16. End Sub
    17. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    18. Label1.Text = zahl(zahl2)
    19. End Sub
    20. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tim B.“ ()

    Was soll das Sect Case in Deiner Funktion zahl?
    Schreib einfach rein Return zahll * 20 und fertig.
    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!