Typen zwischen Formularen übertragen

Vitus

Mitglied
Mahlzeit zusammen,

mich quält folgendes Problem:

Formular 1 beinhaltet einen Datensatz bestehend aus einigen Strings und einem Double Array. Formular 2 ist eine Maske mit der diese Daten geändert werden sollen. Zur Übergabe der Daten habe ich in Formular 2 die Funktion "execute" eingebaut, welche das Formular anzeigt, prüft ob "OK" oder "Abbrechen" gedrückt wurde und entsprechend die Werte zurückgibt. Leider mag der Compiler meinen Code nicht, denn offensichtlich können in VB5 public Funktionen nicht mit Typen als Argument oder Rückgabewert betrieben werden. Sehr frustrierend...

Zur Veranschaulichung mal mein gewünschter Code von Formular 2:
Code:
Dim thisGauge As TGauge

Public Function execute(oldGauge As TGauge) As TGauge
  thisGauge = oldGauge
  frmNewGauge.Show (1)
  If bOK Then
    execute = thisGauge
  Else
    execute = oldGauge
  End If
End Function

Private Sub CommandButton4_Click()
  bOK = False
  Unload frmNewGauge
End Sub

Private Sub CommandButton5_Click()
  bOK = True
  Unload frmNewGauge
End Sub

Private Sub Form_Load()
  bOK = False
End Sub

Und hier die zugehörige Fehlermeldung:
Benutzerdefinierte Typen und Zeichenfolgen fester Länge sind als Typ eines öffentlichen Elements eines Objektmoduls nicht erlaubt. Private Objektmodule sind als Typ eines öffentlichen Elements in einem öffentlichen Objektmodul nicht erlaubt

ich hoffe ihr könnt meine Qualen durch einen angemessenen, und möglichst eleganten Lösungsansatz lindern. Darum bedanke ich mich schonmal für das Interesse :-)

Gruß vom
Vitus
 
Hallo Vitus,

so richtig verstehe ich Dich nicht. Die Funktion ‚execute’ ruft aus Formular 2 Formular 2 auf, oder?
Aber egal.
Du musst in Deinem Projekt ein Modul einfügen (wenn nicht schon vorhanden).
In dem Modul folgendes deklarieren:

Type TGauge
….
....
....
End Type
Public oldGauge As TGauge

Die Funktion ‘Public Function execute(oldGauge As TGauge) As TGauge’ gehört ebenfalls in das Modul.

So müsste es funktionieren.

Viel erfolg
Walter Gutermann
 
Hallo Walter,

danke für Deine Antwort. Ich möchte ein möglichst sauber gekapseltes Programm haben - deshalb die Funktion die im Source von Form2 steht, und Form2 aufruft => einfaches Blackbox Prinzip.
Der Aufruf aus Form1 soll dann nur noch so aussehen:
Code:
gauge = frmNewGauge.execute(gauge)

Deine Lösung funktioniert zwar, ist in meinen objektorientierten Augen jedoch nur suboptimal. Ich könnte ja im Grunde auch einfach im Form1 ein TGauge Objekt als public deklarieren, auf welches dann global von beiden Formularen zugegriffen werden kann.
Geht, ist aber eine quick-and-dirty Lösung.

Deinen Vorschlag habe ich jedenfalls vorerst übernommen, ich wäre aber dennoch froh wenn es noch weitere Lösungsansätze gäbe.

Mit freundlichem Gruß
Vitus
 
Zurück