2009-05-27 14 views
3

Wenn Sie mit einer Sammlung von Formularen arbeiten, die der Benutzer durchlaufen muss, ist es besser, die Daten beim Erstellen einer neuen Instanz dieses Formulars weiterzugeben, oder ist es besser, eine Funktion aus dem vorherigen Formular aufzurufen? Ich habe etwas Code geschrieben, der die vorherige Routine aufruft, und es sieht hässlich aus, und ich kann mir keinen Grund vorstellen, warum es so gemacht wurde. Der einzige Grund, auf den ich kommen konnte, war, wenn die Daten groß waren, und es bestand eine gute Chance, dass der Benutzer die Daten nur in einem speziellen Fall verwenden würde.Wie kann ich Variablen von Formular zu Formular übergeben?

Antwort

5

Wenn Sie alle Ihre freigegebenen Daten in eine Klasse einfügen und dann einen Verweis auf eine Instanz dieser Klasse an den Konstruktor auf jedem Formular übergeben, ist es egal, wie groß die Daten sind, da es sich nur um eine Referenz handelt Jedes Mal übergeben werden.

Dies hat den Vorteil, dass Ihre Formulare nicht miteinander verknüpft sind.

+0

Dies ist die beste Antwort. Überprüfen Sie auch das MVC-Muster, wenn Sie mehr Trennung zwischen Ihren Formularen, Logik und Daten wünschen. –

+0

Wo würden Sie die Instanz der gemeinsamen Datenklasse erstellen? Wenn das Formular von einem Formular erstellt und von byrref übergeben wird, müssen Sie das Formular nicht öffnen, bis Sie mit dem Zugriff auf die Daten fertig sind. –

+0

Sie sollten das ursprüngliche Formular nicht offen halten müssen, die Klasse wird nicht Müll gesammelt, bis der letzte Verweis auf es freigegeben wird. –

0

Das ist eine subjektive Frage zum größten Teil. Ich persönlich habe einen Weg eingeschlagen, der für Leute, die später mit meinem Code umgehen müssen, einfacher zu pflegen war. Ich würde das Formular instanziieren, die öffentlichen Eigenschaften mit allem, was ich versuchen wollte, laden und dann das Formular sichtbar machen. Auf diese Weise wusste jeder, der das "neue" Formular editierte, dass alle Daten vorinstalliert waren. Jeder, der das "alte" Formular bearbeitet, weiß, wo neue Eigenschaften geladen werden sollen.

0

Wenn das neue Formular die Daten sofort benötigt, dann ist es wahrscheinlich besser, sie im Konstruktor dieses Formulars zu übergeben.

0

Sie könnten eine globale Datenvariable haben, die alle Ihre Daten gespeichert werden. Jedes Formular kann unabhängig darauf zugreifen. Wenn Sie über eine Implementierung mit mehreren Threads verfügen, können Sie einfach Thread-Sicherheit für die Accessoren der globalen Datenvariablen hinzufügen.

0

Die zwei Hauptoptionen, die ich normalerweise verwende, sind entweder die Informationen in einer Datenbank wie SQLServer oder MS-Access zu speichern, wenn viele Informationen verwendet werden, oder wenn die Informationen nur in verwendet werden Das nächste Formular Ich würde die Informationen an dieses Formular weitergeben und es dann entsprechend speichern. Wenn sie eine Datentabelle für die Verwendung als Quelle erstellen, speichern Sie die Informationen in einem versteckten Feld oder legen die Informationen sogar in die Textfelder, Beschriftungen, Kombinationsfelder usw., in die sie beim Laden gehen müssen.

0

Wenn Sie über Winforms (nicht Webforms) sprechen, dann sollten Sie wahrscheinlich eine static class verwenden. Verwenden Sie ein statisches Element, um den Verweis des Kontextobjekts (oder was auch immer Sie mit anderen Formularen teilen möchten) zu halten. Alle statischen Elemente werden garantiert vor der ersten Verwendung initialisiert.

Eine ähnliche Alternative wäre die Verwendung des Singleton-Entwurfsmusters, um eine singleton class zu erstellen.

Tatsächlich ermöglichen diese beiden Lösungen nur den Zugriff auf eine einzelne Referenz global, eine Energie, die manchmal überbeansprucht werden kann, also ... sei vorsichtig.

Verwandte Themen