Announcement

Collapse
No announcement yet.

Zugriff auf Liste in einer Function

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Zugriff auf Liste in einer Function

    Hallo zusammen,

    ich habe mit

    Dim ListenName As New List(Of MeineDaten)()
    in einer Function eine Liste mit Werten gefüllt und möchte nach dem Rücksprung aus der Function auf diese Werte zugreifen können.

    Die Deklaration mit Public funktioniert hier wohl nicht.

    Der Aufruf der Function befindet sich in einer Windows-Form z.B. FORM5.
    Die Function selber in einem Modul z.B. MODUL1.

    In FORM5 möchte ich auch auf die Listenwerte zugreifen.


    Prima, wenn jemand eine Lösung hätte!!

    Danke

    vG

    fredyx

  • #2
    Hi,

    beschreibs ein bischen genauer bzw. mit ein paar Zeilen Code.

    mfG Gü

    PS: Genau diese Test sind prädestiniert für Konsolenanwendunge anstatt in Winforms - dort ist nämlich noch die Formlogik die aller nur verkompliziert wenn die Grundlagen nicht passen (das meinte ich in der PN).
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Das ist die Function in einem Modul:

      [highlight=vb.net ]
      Public Function F5_ListenN(ByVal letztDat As Short) As String
      'Form5 hat den Namen LaborwerteFo

      'Übertragen der Messwerte und Notizen aus der Form5-Tabelle in die Liste "ListenName"

      'Liste deklarieren
      Dim ListenName As New List(Of MeineDaten)()


      For i As Short = 0 To letztDat - 100 - 1
      Dim daten As New MeineDaten() '9 Spalten ; das muss hier stehen

      daten.Datum = LaborwerteFo.GroupBox1.Controls(String.Format("dat etimepicker{0}", i + 1)).Text
      daten.PSA_E = LaborwerteFo.GroupBox1.Controls(String.Format("Tex tbox{0}", 7 * i + 1)).Text
      daten.fPSA_E = LaborwerteFo.GroupBox1.Controls(String.Format("Tex tbox{0}", 7 * i + 2)).Text
      daten.Testo_E = LaborwerteFo.GroupBox1.Controls(String.Format("Tex tbox{0}", 7 * i + 3)).Text
      daten.ReHar_E = LaborwerteFo.GroupBox1.Controls(String.Format("Tex tbox{0}", 7 * i + 4)).Text
      daten.ProVol_E = LaborwerteFo.GroupBox1.Controls(String.Format("Tex tbox{0}", 7 * i + 5)).Text
      daten.Miktio_E = LaborwerteFo.GroupBox1.Controls(String.Format("Tex tbox{0}", 7 * i + 6)).Text
      daten.Notiz_E = LaborwerteFo.GroupBox1.Controls(String.Format("Tex tbox{0}", 7 * i + 7)).Text
      daten.wicht_E = LaborwerteFo.GroupBox1.Controls(String.Format("but ton{0}", i + 1)).Text

      ' Neue Zeile zur Liste hinzufügen:
      ListenName.Add(daten)


      Next

      datend2: Return 0
      End Function[/highlight]

      Das ist der Aufruf mit einem Zugriff als Beispiel. Beides steht in einer FORM:

      [highlight=vb.net] Dim xyz As String
      Call F5_ListenN(letztDat)
      Dim ListenName As New List(Of MeineDaten)()

      xyz = ListenName.Item(1).Datum[/highlight]

      "Public Class MeineDaten" und "Public Class MyArrayComparer " stehen auch in der FORM mit dem Namen "LaborwerteFo".

      vG

      fredyx
      Zuletzt editiert von fredyx; 06.10.2008, 22:15.

      Comment


      • #4
        Hi,

        bitte formatiere deinen Code mit den Tags - sonst ist es schrecklich zu lesen.

        Die Tags sind:
        "eckige Klammer auf" dann "highlight=vb.net" dann "eckige Klammer zu"
        Dann kommt hier der Code
        "eckige Klammer auf" "/highlight" "eckige Klammer zu"

        den Code schaue ich gerade an

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          siehe oben!! Sieht ja toll aus!!

          Muss man das "highlight" tippen oder gibt's da einen Button?

          vG

          fredyx

          Comment


          • #6
            Hi,

            auf die Daten aus der Funktion (in .net übrigens Methode genannt) kann deshalb nicht zugegriffen werden da
            [highlight=vb.net]
            Dim xyz As String
            Call F5_ListenN(letztDat) ' <- Ergebnis wird zurückgegeben
            Dim ListenName As New List(Of MeineDaten)() ' <- neue Liste wird erstellt die eigentlich nicht gebraucht wird

            xyz = ListenName.Item(1).Datum ' <- hier wird auf die soeben erstellte Liste zugegriffen und die hat ja keine Werte
            [/highlight]

            Der Code muss so geändert werden dass
            • die Methode als Ergebnis die Liste zurückgibt (auf die willst du ja zugreifen)
            • auf das Ergebnis der Methode zugegriffen wird


            D.h.:
            [highlight=vb.net]
            Public Function F5_ListenN(letzDat As Integer) As List(Of MeineDaten)
            Dim listenName As New List(Of MeineDaten)()

            ' Daten einlesen

            Return listenName
            End Function

            Private Sub Form_Methode()
            Dim letzDat As Integer = 123
            Dim listenName As List(Of MeineDaten) = F5_ListenN(letzDat)
            Dim xyz As String = listenName(1).Datum
            End Sub
            [/highlight]

            Desweiteren einige Tipps:
            • zum Speichern eines Datums gibts den Datentyp DateTime (besser geeignit als String)
            • Labels der Art datend2: Return 0 gibts heutzutage nicht mehr (das war in Fortran 77 so)
            • Variablen und Methoden sollen sinnvolle Bezeichnung haben. F5_ListenN ist nicht sehr aussagekräftig.
            • lokale Variablen beginnen in .net normalerweise mit einem Kleinbuchstaben - alle weiteren Wörter werden mit großen Anfangsbuchstaben geschrieben


            mfG Gü

            PS: Die Tags für Syntax-Highlighting in einer bestimmten Sprache muss man tippen (oder doch nicht?)
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Nabend gfoidl!
              Hab mir eben den Thread mal angeschaut und hätt noch eine kleine Zusatzfrage, wenn du kurz Zeit hättest;

              Du sagtest, dass in .Net die Funktionen nun Methoden genannt werden. Bist du sicher, dass das in VB.Net auch der Fall ist, bzw. nicht nur in C# (aus der Ecke kommst doch, nicht?) so genannt wird? Und was ist mit den Prozeduren? Sind's nun auch Methoden?

              Danke dir schonmal für die Antwort, wenn du Zeit hast
              Mfg, Myst

              Comment


              • #8
                Hi Myst,

                ja ich komme aus der C#-Ecke.

                Diese Behauptung gilt nur für C# - die Verallgemeinerung muss ich revidieren . Laut MSDN werden in VB.net die Code-Einheiten ohne Rückgabwert Prozeduren und die mit Rückgabewert Funktionen genannt.

                Danke für den Hinweis!

                Anmerkung: In C# ist deshalb alles eine Methode da alle einen Wert zurückgegeben, auch wenn dieser void ist.

                Bezüglich Bennung: http://msdn.microsoft.com/de-de/libr...se(VS.80).aspx

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Hallo

                  danke wieder mal. Ich bin mal gespannt, ob mir mal eine Frage kommt, die Du nicht beantworten kannst:

                  Zu Deinen Tipps:
                  zum Speichern eines Datums gibts den Datentyp DateTime (besser geeignit als String)
                  wenn ich das so schreibe, dann habe ich in daten.Datum immer die Uhrzeit stehen.
                  [highlight=vb.net]daten.Datum = New DateTime(LaborwerteFo.GroupBox1.Controls(String.Fo rmat("datetimepicker{0}", i + 1)).Text)[/highlight]

                  Variablen und Methoden sollen sinnvolle Bezeichnung haben. F5_ListenN ist nicht sehr aussagekräftig.
                  Für mich ist das sinnvoll.


                  lokale Variablen beginnen in .net normalerweise mit einem Kleinbuchstaben - alle weiteren Wörter werden mit großen Anfangsbuchstaben geschrieben
                  Ich werde versuchen in Zukunft daran zu denken!!

                  vG

                  fredyx

                  Comment


                  • #10
                    Hi,

                    Ich bin mal gespannt, ob mir mal eine Frage kommt, die Du nicht beantworten kannst:
                    Sicher nicht...


                    dann habe ich in daten.Datum immer die Uhrzeit stehen
                    Datum - kein Problem:
                    [highlight=vb.net]
                    Dim datum As DateTime = DateTime.Parse("06.10.2008")

                    Console.WriteLine(datum)
                    Console.WriteLine(datum.ToShortDateString())
                    Console.ReadKey()
                    [/highlight]

                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment


                    • #11
                      Hallo Gü,

                      In einem VB 2005 Buch habe ich gelernt:

                      In z.B. der Klasse AUTO ist
                      der Hubraum eine Eigenschaft und
                      das Fahren eine Methode.

                      Entspricht das Deiner Definition oder ist das wieder was anderes??

                      Fredyx

                      Comment


                      • #12
                        Sicher nicht...
                        Genau so habe ich mir Deine Reaktion auf die Frage vorgestellt!!

                        fredyx

                        Comment


                        • #13
                          In z.B. der Klasse AUTO ist
                          der Hubraum eine Eigenschaft und
                          das Fahren eine Methode.
                          Die entspricht exakt der Definition.

                          Eine Eigenschaft hat etwas beschreibendes. Der Hubraum beschreibt als Attribut ein Merkmal des Autos.

                          Methoden führen etwas aus. Die Methode Fahren führt dies aus dass sich das Auto bewegt.

                          Die Bewegungen des Autos könnte dann über Eigenschaften verfolgt werden da die aktuelle Geschwindigkeit wiederum eine Eigenschaft ist....

                          mfG Gü
                          "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                          Comment

                          Working...
                          X