[FAQ] Kommunikation von 2 Forms

hauptmann
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?".
herbivore
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 bzw. Closing (mehr mein Geschmack).

Wenn man vorhat, Oberflächen- und Modellobjekte zu trennen, könnte folgender Thread noch ganz hilfreich sein:  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.
Programmierhans
Auch noch ein Link (mit Codebeispiel) zu diesem Thema

 Von Form2 auf Form1 zugreifen.
herbivore
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 scheiben! Und die allgemeine Beschreibung auf dein konkretes Problem zu übertragen, ist in meinen 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.

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
Programmierhans