Datenaustausch zwischen Projekten in einer Projektmappe

03/01/2008 - 21:52 von Peter Fasler | Report spam
Hallo zusammen,
Ich programmiere zwar schon seit Jahren, bin aber Neuling in Visual Basic
(2005 .Net). Verzeiht mir meine Unwissenheit, aber ich komme mit all den
Projektmappen, Projekten, Anwendungen, Assemblies, Namespaces, Modulen,
Klassen, etc. etc. noch nicht klar.
Vielleicht kann mir jemand bei folgendem Problem weiterhelfen:

Gemàss Empfehlungen (MSDN, VB-Hilfe, "gewusst wie", u.a.) ist es
empfehlenswert, ein Gesamtprojekt in mehrere Projekte aufzuteilen, die dann
in einer Projektmappe zusammengefasst werden. Klingt vernünftig. Ich habe
also eine Projektmappe mit 2 Projekten, Projekt1 mit Form1 und Projekt2 mit
Form1 erstellt. Projekt1 öffnet Form1 in Projekt2 und übergibt Daten, mit
denen dann Projekt2 arbeitet. Im Projekt2 wird das Resultat angezeigt und
der Benützer kann dann über einen Button das Projekt2 schliessen, worauf dem
Projekt1 wieder Daten zurückgegeben werden (sollten).
Leider habe ich nirgendwo auch nur einen Hinweis gefunden, wie denn diese
beiden Projekte kommunizieren, bzw. Daten austauschen können. Mein
Forscherdrang hat dann zu folgendem Ergebnis geführt:
Projekt1 macht einen Verweis auf Projekt2. In Projekt1 können dann alle
Klassen, auch Form1 in Projekt2 angesprochen werden, so als ob es gar kein
eigenes Projekt wàre; so weit so gut.
Projekt2 darf nicht geschlossen werden (closed, z.B. über X in der
Kopfleiste), da sonst das Form1 im Projekt2 nicht mehr geladen werden kann.
Von Projekt2 ist ein Verweis auf Projekt1 nicht möglich, da sonst ein nicht
erlaubter "Ringverweis" entstünde.
Ueber ein Button wird also lediglich das Form1 in Projekt2 versteckt
(Form1.hide()).
Irgendwelche Daten an Projekt1 zurückzugeben, ist mir bisher nicht gelungen.
Selbst Projekt1 darüber zu informieren, dass Projekt2.Form1 hidden ist, habe
ich nur über z.B. Form1_paint() im Projekt1 abfangen können, was vermutlich
kaum die richtige Lösung ist.

Jetzt habe ich ein Frustrations-Problem. Ich gehe davon aus, dass alles ganz
einfach zu lösen ist, dass ich nur nicht weiss wie. Kann mich Jemand vom
Frust befreien?
Vielen Dank an Alle, die schon alles wissen, für Ihre Nachsicht und Hilfe.

Allen ein gutes neues Jahr
Peter Fasler
 

Lesen sie die antworten

#1 Peter Fleischer
03/01/2008 - 22:25 | Warnen spam
"Peter Fasler" schrieb im Newsbeitrag
news:

Gemàss Empfehlungen (MSDN, VB-Hilfe, "gewusst wie", u.a.) ist es
empfehlenswert, ein Gesamtprojekt in mehrere Projekte aufzuteilen, die
dann in einer Projektmappe zusammengefasst werden. Klingt vernünftig.



Hi Peter,
das ist auch vernüftig, solange auch eine vernüftige logische Trennung
festgelegt wurde.

Ich habe also eine Projektmappe mit 2 Projekten, Projekt1 mit Form1 und
Projekt2 mit Form1 erstellt.



Also 2 separate Programme? Oder ist das eine Projekt ein Programm und das
zweite Projekt nur einen Klassenbibliothek (dll)?

Projekt1 öffnet Form1 in Projekt2 und übergibt Daten, mit



Wenn es zwei Projekte sind, dann starten beide Projekte separat bzw.
gleichzeitig. Wenn das zweite Projekt eine Klassenbiblothek ist, dann kann
man diese formal als Erweiterung des ersten Projektes (bzw. Programmes)
betrachten.

denen dann Projekt2 arbeitet. Im Projekt2 wird das Resultat angezeigt und
der Benützer kann dann über einen Button das Projekt2 schliessen, worauf
dem Projekt1 wieder Daten zurückgegeben werden (sollten).



Wenn das zweite Projekt eine Klassenbibliothek ist, dann verwaltet das ertse
Projekt die Verweise auf die Objekte, die entsprechend den in der dll
deklarierten Type erzeugt wurden.

Leider habe ich nirgendwo auch nur einen Hinweis gefunden, wie denn diese
beiden Projekte kommunizieren, bzw. Daten austauschen können.



Da gibt es unterschiedliche Technologien, die zuerst festgelegt werden
sollten. Wenn es zwei separate Programme sind (eigenstàndige exe'n), dann
muss zwishcen beiden Programmen eine Kommunikation aufgebaute werden, z.B.
über TCP/IP, Remoting, MSMQ usw. Ggf. wàre auch ein AppDomain von Interesse.
Das sind aber alles fortgeschrittene Technologien, die ein Anfànger erst
einmal nicht betrachten sollte.

Mein Forscherdrang hat dann zu folgendem Ergebnis geführt:
Projekt1 macht einen Verweis auf Projekt2.



Mein Enkel macht sich noch in die Hosen, aber zum Glück sehr selten:-)

Prinzipiell wird eine Variable deklariert, die den Verweis (die Adresse) auf
ein Objekt enthalten kann. Damit der Compiler und die CLR wissen, was das
für ein Objekt ist und was man damit machen darf, muss der Typ festgelegt
werden. Der Typ ist die Bezeichnung der Klasse, die den Programmcode
enthàlt, der letztendlich mit den Daten des Objektes diesen Types ausgeführt
werden kann.

In Projekt1 können dann alle Klassen, auch Form1 in Projekt2 angesprochen
werden, so als ob es gar kein eigenes Projekt wàre; so weit so gut.



Das geht aber nur, wenn es nicht zwei separate Programme sind und die
Innereien der Klassen auch öffentlich sind.

Projekt2 darf nicht geschlossen werden (closed, z.B. über X in der
Kopfleiste), da sonst das Form1 im Projekt2 nicht mehr geladen werden
kann.



Das ist Unsinn. Da liegt ein Programmfehler vor. Von einem Typ (Klasse)
können beliebig viele Objekte (Speicherbereiche für die in dieser Klasse
verwalteten Variablen) erzeugt werden. Es kann also eine neues Objekt vom
Typ Form1 aus dem namensraum des Projektes 2 erstellt werden.

Von Projekt2 ist ein Verweis auf Projekt1 nicht möglich, da sonst ein
nicht erlaubter "Ringverweis" entstünde.



Auch wieder Unsinn. Natürlich ist das möglich.

Ueber ein Button wird also lediglich das Form1 in Projekt2 versteckt
(Form1.hide()).



Das muss aber nicht so sein. Es kann aus der Aufgabenstellung /
Programmablaufplan ggf. resultieren.

Irgendwelche Daten an Projekt1 zurückzugeben, ist mir bisher nicht
gelungen.



Da fallen mir mehrere Möglichkeiten ein:

- Daten in einem Objekt in Projekt1 verwalten und Projekt2 nur eine Referenz
auf das Objekt übergeben. In Projekt2 sind dann alle Änderungen automatisch
in Projekt1 sichtbar, da beie projekte mit dem gelichen Datenobjekt
arbeiten.

- Projekt1 holt sich die Daten aus Projekt2 (Aufruf einer Methode in
Projekt2 aus Projekt1 und Übernahme des Rückgabewertes)

- Projekt2 übergibt die Daten an Projekt1 (Aufruf einer Methode in Projekt1
aus Projekt2 und Übergabe von realen Parameterwerten)

Selbst Projekt1 darüber zu informieren, dass Projekt2.Form1 hidden ist,
habe ich nur über z.B. Form1_paint() im Projekt1 abfangen können, was
vermutlich kaum die richtige Lösung ist.



Das glaube ich auch. Neben referenzparameter, push und pull sind natürlich
auch Ereignisse möglich, z.B. Projekt2 löst Ereignis mit Übergabeargumenten
aus, welches Projekt1 konsumiert.

Jetzt habe ich ein Frustrations-Problem. Ich gehe davon aus, dass alles
ganz einfach zu lösen ist, dass ich nur nicht weiss wie. Kann mich Jemand
vom Frust befreien?



Ein Grundlagenlerhgang zum Programmieren:-)

Viele Gruesse

Peter

Ähnliche fragen