Zum Inhalt springen

[Delphi] Daten von Form1 zu Form2 übetragen


BillyBoy84

Empfohlene Beiträge

Da gibts massig Möglichkeiten, du könntest die Werte z.B. auch im Konstruktor übergeben, wenn Form1 Form2 erzeugt...ist bei vielen Werten aber sehr umständlich. Die Möglichkeit meines "Vorredners" ist natürlich am einfachsten. In dem Fall muß man Unit2 in Unit 1 einbinden. Man sollte aber sicherstellen, daß eine Instanz von Form1 existiert, sonst gibbet unschöne Schutzverletzungen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von grueni

du könntest die Werte z.B. auch im Konstruktor übergeben, wenn Form1 Form2 erzeugt...

Nur noch eine Anmerkung dazu von mir ;)

Ja, er könnte es z.B. im Konstruktor übergeben, ist aber unschön. Für einen Wert ist es Ok (wenn er allgemein und immer im Form2 gebraucht wird). Bei 3 oder mehr wird es sehr unschön, wer will schon ein Create das sich über 2-3 Zeilen hinzieht?

Richtig objektorientiert macht man es zum einen über Methoden. Also ich hab genau eine Funktion/Prozedur für die ich den Wert brauche. Diese Funktion deklariere ich mit dem entsprechenden Parameter und voila.

Beispiel:


TForm1 = class(TForm)

private


public

  procedure MyMethod(AValue: Integer);

end;


var

  Form1: TForm1;


[b]Aufruf:[/b]

  Form1.MyMethod(4);

Auch hier gilt, ist ok für ein (zwei) Parameter, bei mehr wird es unschön. Wie mache ich es (objektorientiert) schön mit vielen Parametern? Dazu bieten sich Properties an. Beispiel dazu:

Form1 = class(TForm1)

private

  FWert1,

  FWert2, 

  FWert8: Integer;

public

  function AddiereWert1BisWert8: Integer;

  property Wert1: Integer read FWert1 write FWert1;

  property Wert2: Integer read FWert2 write FWert2;

  property Wert8: Integer read FWert8 write FWert8;

end;


var

  Form1: TForm1;

  [...]

  Ergebnis: Integer;


[b]Aufruf:[/b]

  Form1:= TForm1.create(self);

  Form1.Wert1:= 2;

  Form1.Wert2:= 4;

  Form1.Wert8:= 5;

  Ergebnis:= Form1.AddiereWert1BisWert8;


[i]Ergebnis = 11[/i]

Das ist nicht so 100% objektorientiert, also es werden keine Getter- und Setter-Methoden verwendet. Aber selbst im Delphi Quellcode findet man sowas ;) Nurmal für alle die es nicht wissen: Im Beispiel oben werden properties definiert und gesagt, bei Lese (bzw. Schreibzugriff) direkt aus der Veriable FWertX zu lesen bzw. direkt dahin zu schreiben. Anstelle der Variable hiner read (write) sollte man (um es 100% korrekt zu machen) eine Funktion (bzw. eine Prozedur) angeben, die den Wert der Variable ausliest (bzw. einen Wert daran übergibt) und man von aussen somit keinen direkten Zugriff auf eine Variable in der Klasse hat. Man kann dabei Prüfungen u.ä. ausführen oder auch andere Dinge tun (z.B. ein Event auslösen oder so). Manchmal würde eine Getter-Funktion aber nicht anders aussehen als

private

  FWert1: Integer;

public

  function GetWert1: Integer

  property Wert1: Integer read GetWert1;

end;


  { Implementation }

function TForm1.GetWert1: Integer;

begin

  Result:= FWert1;

end;

In solchen Fällen ist man einfach faul und weisst FWert1 gleich zu.

So, das war eine kurze Lehrstunde ;)

Natürlich geht es auch so wie oben schon beschrieben, diese Methode ist aber allgemeiner und lässt sich für alle Klassen (nicht nur Formulare) verwenden (und ist ausserdem "eleganter") ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...