WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   VB(A) - Kommunikation zwischen Formularen.... (http://www.wcm.at/forum/showthread.php?t=101583)

renew 03.07.2003 16:45

VB(A) - Kommunikation zwischen Formularen....
 
Gibts eine schnelle und einfach Möglichkeit um div. Parameter usw. zwischen Formularen zu übergeben?

Das einzige was mir bis jetzt eingefallen ist, ist ein globales Modul mit div. Funktionen, die in globale Variablen des Moduls schreiben.
Und dann rufe ich vom anderen Formular wieder Funktionen des Moduls auf, die mir dann die Parameter wieder zurück geben.

Ist total umständlich, und ich denk mir, da muss es doch was besseres und saubereres geben. ;)

Ich dank euch schon mal für eure Ideen. :)

Seidl 04.07.2003 10:36

Da ist deine Problemstellung leider ein wenig ungenau. Was genau willst du machen?
Wenn du auf Werte von beiden Formularen aus zugreifen willst, dann sind globale Variablen gar keine schlechte Lösung. Wenn's passt wäre vielleicht sogar eine Kapselung über eine Klasse was schönes. Wenn du aus einem Formular direkt im anderen Formular was machen willst, dann kannst du es ja auch direkt ansprechen (Funktionen, Felder, ...)

renew 04.07.2003 11:19

z.B.
ich hab ein Übersichtsformular mit div. Datensätzen in einem Listefeld.

Dann klickt man einen Datensatz an - ich möchte die ID an ein anderes Formular übergeben.
Weil in dem Formular was sich dann öffnet möchte ich natürlich gleich den Datensatz anzeigen, der im "Hauptformular" angeklickt wurde.

Ich hab mich mal mit Globalen Variablen gespielt (is schon länger her > 1 Jahr) nur damals hat das ganze net so hin gehaut.
Globale Variablen def. man ja eigenltich in einem modul mit public dim - oder?

Und die Idee mitn Klassenmodul is net sogar supa - das könnt ich mir überlegen.

Weil dann mach ich mir eine Klasse, und setz dort meine Parameter die ich übergeben möchte, und im anderen Formular lese ich diese Standardmäßig aus. ;)

jak 04.07.2003 18:17

Nur so 'ne blöde Idee:
Die Variablen müssten doch "Kinder" der Formulare sein. Vielleicht kann man sie also mit formularname.variable ansprechen?:confused:
Ähnlich müsste es auch mit eingabefeldern funktionieren (formularname.eingabefeldname.value).
Keine Ahnung ob das geht (siehe oben).


Jak

Seidl 05.07.2003 18:52

@ jak: Absolut korrekt.

@ LLR: Beim Öffnen eines Formulars kann man auch ein Argument übergeben.

docmd.OpenForm "frmVourForm",,,,,,"YourArgument"

renew 05.07.2003 21:15

Zitat:

Original geschrieben von Seidl
@ jak: Absolut korrekt.

@ LLR: Beim Öffnen eines Formulars kann man auch ein Argument übergeben.

docmd.OpenForm "frmVourForm",,,,,,"YourArgument"

ohh, danke. ;)

und die Idee von Jak könnt ich auch aufgreifen.

Jetzt denke ich, ich habe einige Ideen von euch bekommen, wie man das ganze recht schnell abwickeln kann. :)

renew 07.07.2003 15:59

So jetzt steh ich vor dem "Problem" (ich hab schon ein wenig früher gepostet - damit ich dann nicht anstehe... ;))

Hmm, Problem is, wie moch i des jetzt.

Die Einfachste Methode, die ich bei dem Fall jetzt gerne Verwendet hätte ist einer Globalen Variable eines Formulars einen Wert zu geben.

Das Formular was geöffnet wird heißt Formular2 - die Variable Test (vom Typ String).

Der Code dazu schaut folgendermaßen aus:
Code:

DoCmd.OpenForm "Formular2", , , , , , ""

Formular2.test = "hallo"

Nur bei der Zeile Formular2.test kommtals Fehlermeldung: "Objekt erforderlich".

Mir is das auch ein bißchen zu leicht vor gekommen. ;)

Die andere Idee wäre ja ein Klassenmodul. Nur im Prinzip ists da ja dann so, wie wenn ich das mit einem "normalen" Modul und dortigen globalen Variablen gemacht hätte.
Bzw. kann ich überhaupt einer Function/Procedure in einer Klasse Variablen übergeben - weil ich bekomm bei meinem kleinen Testprogramm sowohl bei der Prozedur "schreiben (strVar as string)" als auch bei der Function "Lesen() as string" die Fehlermeldung:
"Objektvariable oder With-Blockvariable nicht fest gelegt"

Hmm, ich bin noch ein ziemlicher DAU was Klassen betrifft. :rolleyes:

BTW: wenn jemand ein paar nette Tutorials od. sonstige Webseiten zum Thema Klassen in VB kennt (damit meine ich was geht, was geht nicht und wie gehts), dann bitte einen Link posten. :)

flinx 07.07.2003 16:50

Zitat:

Das Formular was geöffnet wird heißt Formular2 - Variable Test (vom Typ String)
Wie hast sie deklariert?

renew 07.07.2003 16:53

das is der ganze Code vom neuen Formular:
Code:

Option Compare Database
Dim test As String

Private Sub Befehl0_Click()

Dim hallo As testklasse

MsgBox test

End Sub

Das ganze is noch auf testbasis - weil da findet man Fehler schneller, wie wenn ich zwischen 900 Code-Zeilen herumpfusch. ;)

Aufgerufen wirds von einem anderen "Pseudo-Formular", names Formular1, auch mit einem Button. ;)

flinx 07.07.2003 17:13

Zitat:

Variablen, die mit Dim auf Modulebene deklariert wurden, stehen allen Prozeduren innerhalb des Moduls zur Verfügung. Auf Prozedurebene deklarierte Variablen stehen nur innerhalb der umgebenden Prozedur zur Verfügung.
Versuchs mit:
Code:

Public test as String


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:38 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag