Announcement

Collapse
No announcement yet.

Windows.Forms referenzieren/vererben

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

  • Windows.Forms referenzieren/vererben

    Hallo zusammen,

    ich habe zwei Forms mit den gleichen Elementen:

    form1.txtText
    form1.optAuswahl
    form2.txtText
    form2.optAuswahl
    Nun verarbeite ich den Inhalt in einer Sub weiter

    Sub Verarbeitung(byval formular as form)
    dim a as string = formular.txtText.text
    etc...
    End Sub
    Der Aufruf erfolgt mittels

    Verarbeitung(form1)
    Verarbeitung(form2)
    Leider bekomme ich als Fehler von der Sub zurück:

    "txtText ist kein Member von formular..."

    Kann mir jemand einen Tipp geben, wie genau der Verweis zu erfolgen hat?

    Danke und Gruß
    Volker
    Zuletzt editiert von Bazonga; 15.12.2010, 16:37.

  • #2
    Es wäre wahrscheinlich geschickter nicht die Form an die Methode zu übergeben sondern nur die benötigten Daten, wenn es nur der string aus der Textbox ist solltest du also nur den string an Verarbeitung übergeben.

    Comment


    • #3
      Kann sein, aber bei 10 Feldern wird es bei der Parameterübergabe schon recht unübersichtlich.
      Was mich wundert ist, dass es bei DataGridViews keine Probleme gibt.
      Wo liegt also bei den Forms mein Denkfehler?

      Comment


      • #4
        Wo liegt also bei den Forms mein Denkfehler?
        .Net ist ein starktypisierte Sprache jedes Methodenziel muss also zur Kompilierzeit feststehen. Da Form1 und Form2 nicht voneinander ableiten hast du deren Vorfahren Form an die Methode übergeben und Form selbst hat keinen txtText Member die haben erst die Nachfahren also knallt das sofort. Ein DataGridViews ist und bleibt ein DataGridView(keine ableitung) darum kannst du da immer drauf zugreifen. Du wirst aber ~weich~ auch die Daten im DataGridView zugreifen und nicht über konkerte benannte Namen/Properties. Bedeutet wenn da was falsch läuft knallt es dummerweise erst zur Laufzeit und nicht schon zur Kompilierzeit.

        Mögliche Vorgehen wären

        a.) Sich ein richtiges Datenmodell zu überlegen. Also von Formen unabhängige Klassen mit den Daten die man problemlos rumreichen kann. Das wäre die saubere Methode.
        b.) Form1 und Form2 voneinander ableiten bzw. einen gemeinsamen Vorfahren schaffen der diesen txtText Member hat. Das wäre die schnelle Methode. Visual Inheritance hat aber seine eigenen speziellen Problemen und davon würde ich abraten.
        c.) Form1 und Form2 ein gemeinsames Interface verpassen, in beiden Formen implementieren und dieses Interface an die Verarbeitung Methode übergeben. Das wäre die weder 'Fisch noch Fleisch'-Lösung.

        Du solltest dir a.) vornehmen.

        Comment


        • #5
          Danke für die Tipps.
          Ich mache es aber nun quick & dirty und spreche die Felder direkt an, also form1.txtText.text etc.
          So bleibt der Quellcode auch für nicht qualifizierte OOP-Entwickler verständlich und wartbar.

          Comment


          • #6
            So bleibt der Quellcode auch für nicht qualifizierte OOP-Entwickler verständlich und wartbar.
            Aus Erfahrung sage ich dir das du damit vermutlich genau das Gegenteil erreichst

            Comment


            • #7
              Wir reden hier von Tools mit vielleicht 10.000 Zeilen Code und nicht von einer Programmierung von z.B. Office.
              Als strukturiert-funktional denkender Mensch konnte ich mit dem Klein-klein von OOP nie viel anfangen. Allein beim Debuggen gruselt es mich immer :-)
              Aber das sind dann ja Glaubensfragen.

              Comment

              Working...
              X