Announcement

Collapse
No announcement yet.

objekt problem

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

  • objekt problem

    Hallo,

    Ich habe eine Form1 mit einer Prozedur:

    public sub MeineProzedur(neuerText)
    me.textbox1.text=neuerText
    end sub

    ich verwende folgenden Code um eine neue Form aus einer andern zu öffnen:

    dim neueForm as new Form2
    neueForm.Show()

    Wenn ich in dieser Form jetzt z.b. einen Button klicke,
    der ein Prozedur aus der vorherigen Form aufruft und dort Felder setzen soll, dann passiert nix

    Beispiel:

    'Form2

    dim alteForm as new Form1
    alteForm.MeineProzedur("blubb")

    '--------------------------

    Textfeld1 würde in dem Fall nicht gesetzt...
    Ich denke mir es liegt daran, dass ich Form1 mit dem Schlüsselwort "new" in der Form2 aufrufe...
    habe aber keine Idee wie ich es anders lösen könnte.

    Kann mir jemand weiterhelfen?

  • #2
    <b>dim alteForm as new Form1 </b>
    dürfte ein neues Form1 erstellen, was Du dann aber nicht anzeigst! Normalerweise sollte sich das alte Form die Daten selbstständig holen oder das alte Form setzt einen Verweise auf sich in einer öffentlichen Property vom neuen Form.<p>
    Mari
    Schöne Grüße, Mario

    Comment


    • #3
      ...nur find ich die Eigenschaft nicht :-

      Comment


      • #4
        Hallo,

        wenn das neue Formular als Reaktion auf den Button-Klick die folgenden Zeilen aufruft, so wird nur eine neue Instanz des alten Formulars erzeugt aber <b>nicht</b> angezeigt und in dieser unsichtbaren Instanz die Methode <i>MeineProzedur</i> aufgerufen:
        <code>
        dim alteForm as new Form1
        alteForm.MeineProzedur("blubb")
        </code>
        Wenn es darum geht, dass das neue Formular eine Methode des alten Formulars (aus dem heraus das neue Formular aufgerufen wurde) aufrufen soll, so muss das alte Formular einen Verweis auf sich selbst (Me) an das neue Formular übergeben. Dies könnte durch einen überladenen Konstruktor geschehen. Das neue Formular speichert diesen Verweis auf den "Vater" in einem eigenen Objektfeld, um dann die Methode <i>MeineProzedur</i> über diesen Verweis aufzurufen:
        <code>
        aParentForm.MeineProzedur("blubb")
        </code>
        Alternativ besteht in VB.NET ja auch die Option, über ein <b>Module</b> eine öffentliche "globale Variable" für das Hauptformular anzulegen, so dass das 2. Formular direkt über diesen Weg auf das 1. Formular zugreifen kann:
        <code>
        Module ModuleData

        Public alteForm As Form1

        End Module
        </code>
        Das 1. Formular muss dann nur den Verweis auf sich selbst (Me) in dieser öffentlichen "globalen Variablen" ablegen:
        <code>
        Private Sub Form1_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load
        MeinProgramm.ModuleData.alteForm = Me
        End Sub
        <code>
        &#10

        Comment

        Working...
        X