Mehrere Ergebnisse aus einer Funktion zurückgeben?

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Jens.

    Mehrere Ergebnisse aus einer Funktion zurückgeben?

    Ich bin beim Aufräumen meines Codes und dabei, Code in Module mit Funktionen auszulagern, um auch aus anderen Teilen auf die Module zugreifen zu können.
    Dank der Hilfe von Mad Andy kann ich jetzt eine Funktion aufrufen und auch einen Wert zurückgeben.
    Geht dass eigentlich auch für zwei Werte?
    Beispiel: Ich möchte den Text von zwei Textboxen durch eine einzige Funktion mit zwei unterschiedlichen Werten füllen.
    Falls das funktioniert, wie sieht denn hier grob der Syntax für Aufruf und Rückgabe aus?

    Grüße aus Leipzig
    Jens
    Hier mal ein Beispiel mit benutzerdefinierten Typen/Strukturen in VB6 (weiß nicht ob sich das in VB.net geändert hat):

    VB.NET-Quellcode

    1. Public Type zweiWerte
    2. String1 as String
    3. String2 as String
    4. end type
    5. public function Test() as zweiWerte
    6. Test.String1 = "bla"
    7. Test.String2 = "..."
    8. end function

    Wenn dies in .net nicht funktioniert, ließe sich das ganze auch mit Klassen realisieren, was aber auf jeden fall mit .net geht...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau

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

    1. heißt Type in .NET anders! Und zwar Structure
    2. gehts mit nem array leichter ;) (Das war bei 6.0 ja nicht so leicht)


    Also:

    VB.NET-Quellcode

    1. ' Funktion:
    2. Public Function Irgendwas() As Array
    3. Dim a(3) As String 'Dekleration des Arrays, der Zurückgegeben wird.
    4. ' Kann z.B. auch as Decimal, ... sein
    5. 'Dem Array die Werte zuweisen
    6. a(0) = "0"
    7. a(1) = "1"
    8. a(2) = "2"
    9. a(3) = "3"
    10. 'Array Zurück geben
    11. Return a
    12. End Function
    13. 'Im Formular:
    14. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    15. Dim a(3) As String
    16. a = Irgendwas()
    17. TextBox1.Text = a(0)
    18. TextBox2.Text = a(1)
    19. TextBox3.Text = a(2)
    20. TextBox4.Text = a(3)
    21. End Sub



    ich hoffe das hat dir geholfen ;)
    Wenn nicht: ICQ ^^


    [EDITED]
    Ich hoffe du weißt was ein Array ist...
    naja... zur Sicherheit:
    In einem Array können mehrere Werte des gleichen Typs gespeichert werden.
    Diese werden dann mit einem Index angesprochen.

    Das heißt mit VariablenName sprichst du den Array selbst an (z.B. wenn du einen Array einem Anderen mit '=' gleich setzt) und mit VariablenName(Index) sprichst du einen Wert an (z.B. TextBox1.text = MeinArray(0)).

    Die Zahl, die bei der Dekleration in der Klammer steht ist der höchste index. Der niedrigste ist (falls nichts anderes angegeben ist) 0
    [EDITED]

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Mad Andy“ ()

    Danke Euch Beiden,
    Bei Type fand ich in der MSDN nur die Hinweise, dass es einen Assistenten gibt, der das Ganze aus VB 6.0 in .NET versucht zu konvertieren.
    Mit dem Array - das habe ich probiert - funzt einwandfrei.
    Es ärgert mich immer wieder, dass man kein vernünftiges Buch zu NET findet. Vielleicht bin ich auch nur vom Delphi ( zumindest der zahlreichen Litratur dazu) verwöhnt?!

    Gruß aus Leipzig
    Jens

    @Mad Andy
    Danke Dir - aber Du weißt ja auch - zumindest grob - woran ich hier "herumbastle" ;), deshalb weißt Du auch ganz genau, wie Du mir helfen kannst ;)
    kein Problem ;)

    Btw. Ich Persönlich finde es gibt zu .NET mehr als genug Bücher...
    Aber entweder behandeln die nur die Grundlagen, mit denen man oft nicht viel anfängt oder nur ein Spezielles Thema (z.B. Datenbanken)

    Und für uns "normale" dazwischen gibts einfach nix


    Wenn du schon damit anfängst... ich hab mir ein .net Buch gekauft und davon genau 5 seiten gelesen und es dann wieder weg gelegt ^^
    Ich halte nicht viel von Büchern. Dafür aber viel von learning by doing und "rum probieren"

    Schöne Grüße
    Gestern im laufenden Code eingefügt - funzt toll.
    Bin aber noch nicht am Ziel:
    Will ja die Funktion in ein Modul auslagern.
    Hier ein Ausschnit aus dem Code von Mad Andy und meiner Frage als Kommentar im Code

    VB.NET-Quellcode

    1. 'Dem Array die Werte zuweisen
    2. a(0) = "0" 'Hier kann ich alles tun - auch Berechnungen - funzt
    3. a(1) = "1" 'Wie kann ich hier aber innerhalb eines Modules mit
    4. a(2) = "2" 'Werten aus der Form1 arbeiten? Wie kommen die Werte hier hin?
    5. a(3) = "3"
    6. 'Beispiel ohne Berechnung
    7. a(3) = TextBox1.Text 'funktioniert ja nicht, weil im Modul TextBox1.Text nicht bekannt ist. Der Code funktioniert nur innerhalb der Class Form1

    Grüße aus Leipzig
    Jens
    Also das funktioniert so wie vorher:

    VB.NET-Quellcode

    1. Public Function BeispielFunktion (ByVal Wert1 as Decimal, ByVal Wert2 as Decimal, ...) as Array
    2. Dim a(1) as Decimal ' Dekleration des Rückgabearrays
    3. ' Berechnungen:
    4. a(0) = Wert1 * 10
    5. a(1) = Wert2 / 10
    6. ' Array zurück geben
    7. return b


    In der Form:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim a(1) As String
    3. a = Irgendwas(TextBox1.Text, TextBox2.Text)
    4. TextBox3.Text = a(0)
    5. TextBox4.Text = a(1)
    6. End Sub



    Ich hoffe du kapierst es ;)
    Sieh mir nach, wenn das Kücken das Huhn belehrt ;) , aber

    VB.NET-Quellcode

    1. return b

    funzt so nicht, weil b nicht deklariert.
    Ich hoffe du kapierst es

    Schaun wir mal:
    Habe Deinen Code so geändert, dass das Projekt durchläuft. Falls jemand anderes irgendwann einmal das gleiche Problem hat, kann er es auf die Art und Weise einfacher nachvollziehen.
    Konstellation:
    1. Form1 mit 4 Textboxen und einem Button
    2. ein Modul
      [/list=1]
      Folgender Code im Clickereignishandler von Button1 auf Form1:

      VB.NET-Quellcode

      1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      2. Dim a(1) As Decimal
      3. a = Beispielfunktion(CDec(TextBox1.Text), CDec(TextBox2.Text)) 'Hier wird zum Modul mit der Funktion gesprungen und der Funktionsvariablen "Wert1" der Wert von TextBox1 und er Funktionsvariablen "Wert2" der Wert von Textbox2 zugewiesen.
      4. TextBox3.Text = a(0)
      5. TextBox4.Text = a(1)
      6. End Sub


      Folgender Code im Modul:

      VB.NET-Quellcode

      1. Module Irgendwas
      2. Public Function Beispielfunktion(ByVal Wert1 As Decimal, ByVal Wert2 As Decimal) As Array
      3. Dim a(1) As Decimal ' Deklaration des Rückgabearrays
      4. ' Berechnungen:
      5. a(0) = Wert1 * 10
      6. a(1) = Wert2 / 10
      7. ' Array zurück geben
      8. Return a
      9. End Function
      10. End Module

      Jetz wird in den Textboxen 3 und 4 das Ergebnis der Berechnungen aus dem Modul angezeigt
      wenn man in TextBox1 und TextBox2 zahlen eingibt und auf Button 1 klickt. Ist doch ein Zeichen dafür, dass ich's kapiert habe - oder?
      Ich möchte einmal mit Profis arbeiten :D
      Herzlichen Dank für Deine Hilfe
      Grüße an alle, die mit Ihrem Laptop in der Schule online sind ;) - stimmts Mad Andy ;)
      Jens

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