Announcement

Collapse
No announcement yet.

Klasse als Rückgabeparameter?

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

  • Klasse als Rückgabeparameter?

    Hallo zusammen!

    Ich bin neu hier im Forum und arbeite an einem VB.Net Projekt. Ich bin von VB6 umgestiegen und mache gerade die ersten Erfahrungen mit Klassen.

    Nun zu meinem Problem: Ich möchte aus einer XML-Datei die Pfadangaben für Dateien herauslesen. Das sind die Pfade für einen Eingangs- und einen Ausgangsordner. Also gibt die Function zwei Werte zurück. Ich hatte dazu ein wenig im Netz gesucht und den Hinweis gefunden, dass man in solch einem Fall eine Klasse als Rückgabetyp verwendet. Also habe ich eine Klasse erstellt:

    [highlight=vb.net]
    Public Class clsPfade
    Public Pfad_Ein As String
    Public Pfad_Aus As String

    Public Function PfadeEA_Einlesen()
    Dim setting As New XmlReaderSettings()
    Dim reader As XmlReader = XmlReader.Create("C:\test\PfadConfig.xml")

    'Objekt erstellen und instantiieren
    Dim clsPfdEA As clsPfade
    clsPfdEA = New clsPfade

    'Einstellungen für XML-Datei festlegen
    setting.ConformanceLevel = ConformanceLevel.Document
    setting.IgnoreWhitespace = True
    setting.IgnoreComments = True

    reader.MoveToContent()
    reader.ReadToDescendant("Eingang")
    clsPfdEA.Pfad_Ein = reader.ReadElementString()
    reader.ReadToDescendant("Ausgang")
    clsPfdEA.Pfad_Aus = reader.ReadElementString()

    'Eingelesene Pfade zurückgeben
    Return clsPfdEA

    End Function
    End Class
    [/highlight]

    Wenn ich den Code per Einzelschritt durchgehe, enthält clsED1 bei der Return-Anweisung die richtigen Daten. Wenn ich mir dann aber in der aufrufenden Form.Load-Anweisung in Label-Steuerelementen die Daten anzeigen lassen will, zeigen die nichts an. Wie kriege ich die Daten vernünftig übergeben? Macht man das überhaupt so? Habt Ihr evtl. bessere Vorschläge?

    Danke für Eure Hilfe
    Rene

  • #2
    Wenn du etwas innerhalb eine Funktion anlegst (hier: New clsPfade), dann wird das Objekt ungültig, wenn der Gültigkeitsbereich der Funktion verlassen wird.
    Also das Objekt in der aufrufenden Klasse erstellen und der verarbeitenden Klasse befüllen lassen
    Christian

    Comment


    • #3
      Hallo!

      Vielen Dank für Deine schnelle Antwort. Verstehe ich das richtig, dass aufrufende Klasse in diesem Fall die Klasse ist, in der Funktion Form.Load aufgerufen wird und die verarbeitende Klasse dann clsPfade ist? Ich habe versucht ein Objekt sowohl innerhalb von Form.Load zu erstellen mit Dim MyPFdEA as new clsPfade als auch direkt unterhalb von Partial Public Class..., leider wird dann innerhalb der Function angezeigt, das MyPfdEA nicht deklariert wurde...was mache ich falsch?

      [highlight=vb.net]
      Public Class clsPfade
      Public Pfad_Ein As String
      Public Pfad_Aus As String

      Public Function PfadeEA_Einlesen()
      Dim setting As New XmlReaderSettings()
      Dim reader As XmlReader = XmlReader.Create("C:\test\PfadConfig.xml")

      'Einstellungen für XML-Datei festlegen
      setting.ConformanceLevel = ConformanceLevel.Document
      setting.IgnoreWhitespace = True
      setting.IgnoreComments = True

      reader.MoveToContent()
      reader.ReadToDescendant("Eingang")
      MyPfdEA.Pfad_Ein = reader.ReadElementString() 'Hier kommt der Fehler
      reader.ReadToDescendant("Ausgang")
      MyPfdEA.Pfad_Aus = reader.ReadElementString()

      'Eingelesene Pfade zurückgeben
      Return clsPfdEA

      End Function
      [/highlight]

      Rene

      Comment


      • #4
        Du kannst nicht irgendwo eine Klasse deklarieren und erwarten, dass diese überall sichtbar ist.

        Deklariere die Klasse in deiner "Oberklasse" und rufe die Verabeitung mit der instanz auf

        Public Function PfadeEA_Einlesen(hier als Parameter übergeben)

        ...ist kein guter Stil, die Verarbeitung in einer Klasse vorzunehmen , die die gleiche ist, wie die Klasse, die die Daten aufnimmt
        Zuletzt editiert von Christian Marquardt; 21.12.2009, 14:00.
        Christian

        Comment


        • #5
          Hallo!

          Vielen Dank für deine Hilfe, so funktioniert es . Trotzdem muss ich noch mal nachfragen, ist das die Vorgehensweise, wie man normalerweise macht, oder eine Sonderform, weil ich umständlich programmiert habe? Denn wenn dem so ist, würde ich gerne wissen, wie man es normalerweise macht, damit ich mir keine "Kunst und Kurven"-Technik aneigne.

          Rene

          Comment

          Working...
          X