Laden...
FAQ

[FAQ] Kommunikation von 2 Forms

Erstellt von hauptmann vor 18 Jahren Letzter Beitrag vor 13 Jahren 170.790 Views
H
hauptmann Themenstarter:in
704 Beiträge seit 2003
vor 18 Jahren
[FAQ] Kommunikation von 2 Forms

Links:

Kommunikation zwischen zwei Forms
MVC (Model-View-Controller Pattern mit ASP.NET)

Der Thread Wie von einer WIndow-Form auf die GUI-Elemente einer anderen Window-Form zugreifen? zeigt sehr schön, was man alles an Fehlern und schlechten Designansätzen vermeiden kann und sollte.

Und in Vorüberlegung zur Form2Form-Kommunikation: Programm-Design überdenken wird die Frage behandelt: "Brauche ich wirklich ein GUI mit mehreren unabhängigen Forms?".

[last.fm](http://www.last.fm/user/hauptmanAlpha/)
49.485 Beiträge seit 2005
vor 18 Jahren

Hallo zusammen,

dies ist keineswegs der einzige Thread zu dem Thema - im Gegenteil. Kaum ein Thema wurde so oft und ausführlich besprochen, wie dieses. Es gibt auch Threads zu dem Thema, in denen Codebeispiele enthalten sind.

Gute Suchbegriffe für die Forensuche sind:

Form1 Form2

je nach Geschmack noch garniert mit ShowDialog (weniger mein Geschmack) oder Closed/FormClosed bzw. Closing/FormClosing (mehr mein Geschmack).

Wenn man vorhat, Oberflächen- und Modellobjekte zu trennen, was mittlerweile Standard ist, könnten folgende Threads ganz hilfreich sein: [Artikel] Drei-Schichten-Architektur sowie Zugriff auf Steuerelement aus Klasse, Codebeispiel in Zugriff auf Steuerelement aus Klasse.

herbivore

PS: Hier noch ein Artikel auf codeproject.com zu dem Thema: Passing Data Between Forms

PPS: Von thomas.at stammt die folgende, hilfreiche Visualisierung der unterschiedlichen Arten des Zugriffs, je nachdem in welche Richtung der Zugriff erfolgen soll.


  Form1                                              Form2
+-------+                                          +-------+
|       |   direkt über Properties und Methoden    |       |
|       |----------------------------------------->|       |
|       |                                          |       |
|       |                                          |       |
|       |   indirekt über Events                   |       |
|       |<-----------------------------------------|       |
+-------+                                          +-------+

Dazu noch folgende Hinweise:

  • Ein Form sollte nie auf die Internas eines anderen Forms zugreifen. Insbesondere sollte ein Form nie auf die Steuerelemente eines anderen Forms zugreifen. Stattdessen definiert man für die zu übertragenden Werte bzw. auszuführenden Aktionen öffentlichen Methoden oder Properties, über die der Zugriff erfolgt.
  • Form2 sollte nie auf Form1 zugreifen. Form2 sollte Form1 nicht mal kennen. Das ist auch nie nötig. Stattdessen verwendet man Events ([FAQ] Eigenen Event definieren).
  • Wenn man entgegen dieser Regeln versucht, aus dem Unterforum auf new Hauptform () zuzugreifen, darf man sich nicht wundern, wenn das eigentliche Hauptform von den Änderungen in diesem neuen (unsichtbaren) Hauptform-Objekt nichts mitbekommt.
  • Wenn man diese Hinweise berücksichtigt, dann funktioniert der Datenaustausch in beide Richtungen auch dann, wenn Form2 in einem anderen Projekt B liegt, das vom Projekt A mit Form1 benutzt wird.
4.221 Beiträge seit 2005
vor 18 Jahren

Auch noch ein Link (mit Codebeispiel) zu diesem Thema

Von Form2 auf Form1 zugreifen.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Ratsuchender,

was tun, wenn dir alle diese Infos und auch die Forumssuche nach Form1 Form2 noch nicht geholfen hat?

Bitte mach keinen neuen Thread auf, denn:

In den hier genannten Threads und über die Forumssuche findest du alle Informationen, die ihr brauchst! Wir könnten in dem neuen Threads auch nichts anderes oder neues schreiben! Und die allgemeine Beschreibung auf dein konkretes Problem zu übertragen, ist in unseren Augen eben genau deine Aufgabe.

Wenn es mit deiner Herangehensweise nicht funktioniert, kann das auch daran liegen, dass deine Herangehensweise ungünstig oder ungeeignet ist. In diesem Fall solltest du dich besser auf einen der beschriebenen Ansätze einlassen.

Wenn der Code trotzdem nicht tut, was er deiner Meinung nach tun sollte, stelle alle deine Annahmen, die du getroffen hast, infrage. Oft genug kommt man gerade deshalb nicht weiter, weil man annimmt, dass der Fehler an einer bestimmten Stelle oder an einer bestimmten Ursache auf keinen Fall liegen kann, aber gerade genau dort liegt. Überlege, welche Codestellen und Fehlerquellen du gedanklich ausgeschlossen hast, und prüfe, wenn du nicht weiterkommst, genau diese (erneut und) unvoreingenommen.

Wenn alle Stricke reißen, probiere, ob du mit [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden weiterkommst.

Und wenn das alles noch nicht hilft, liegt es vermutlich daran, dass dir ein paar Grundlagen der objektorientierten oder der Windows-Programmierung fehlen. Diese Grundlagen eignest du dir am besten an, indem du ein gutes Buch durcharbeitest (siehe auch [FAQ] Wie finde ich den Einstieg in C#? und Buchempfehlungen). Ein Forum kann keine Einführung in die (Windows-)Programmierung ersetzen und auch nicht leisten.

In diesem Sinne viel Erfolg!

herbivore

4.221 Beiträge seit 2005
vor 13 Jahren

Hier noch ein typisches Problem:

Form verliert den Focus und springt in den Hintergrund...

Nachtrag:

Wenn mehrere Forms gleichzeitig bearbeitbar sein sollen, so müssen die Forms NICHT Modal angezeigt werden. (Show statt ShowDialog)... und man kann sich dann in FormClosing oder FormClosed Event einklinken um allfällige Werte eines sich schliessenden Forms wieder auf das aufrufende Form zu übertragen.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...