BillyBoy84 Geschrieben 13. Januar 2004 Geschrieben 13. Januar 2004 Wie kann ich die Daten von der ersten Form in die zweite übernehmen! Also ich meine Dinge, die der Benutzer eingibt? Zitieren
sunday united Geschrieben 14. Januar 2004 Geschrieben 14. Januar 2004 moin. entweder mit ner globalen Variable, in die Du die Werte speicherst, die eingegeben werden, oder einfach form2.edit1.text:=for1.edit14.text oder so. Dazu musst Du in die zweite Unit aber wahrscheinlich unit1 einbinden. Hoffe das hilft. greetz Zitieren
grueni Geschrieben 14. Januar 2004 Geschrieben 14. Januar 2004 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. Zitieren
BillyBoy84 Geschrieben 14. Januar 2004 Autor Geschrieben 14. Januar 2004 Ok, danke, genau die obige Lösung habe ich gesucht! Zitieren
geloescht_JesterDay Geschrieben 14. Januar 2004 Geschrieben 14. Januar 2004 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") Zitieren
Empfohlene Beiträge
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.