beanbear6 - So 02.02.14 11:30
Titel: Edit in anderer Form finden
Hallo,
ich hab hier mal was versucht und grüble mich dumm und dämlich... Warum geht das so nicht??
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TPausMusik.ListBox1DblClick(Sender: TObject); var i : Integer; begin Main.Edit1.Text := 'Eintrag';
i := 1; Main.TEdit(FindComponent('Edit'+IntToStr(i))).Text:='Eintrag'; end; |
Ich klicke auf der Main-Form auf ein Edit-Feld. Dann geht das Fenster Pausmusik auf mit einer Liste.
Wenn ich daraus einen titel mit Doppelklick anwähl soll dieser in der Main im entsprechenden Edit-Feld eingetragen werden. Kann mit jemand helfen??
Vielen Dank für jeden tip
beanbear6
Moderiert von
Martok: Delphi-Tags hinzugefügtModeriert von
Narses: Topic aus Sonstiges (Delphi) verschoben am So 02.02.2014 um 19:57
jaenicke - So 02.02.14 12:59
Erstens ist es keine gute Idee so von einem Fenster auf ein anderes zuzugreifen. Besser wäre, wenn du das über Properties und Events regelst...
Zum Problem:
Du schreibst Main.TEdit... das heißt du möchtest auf die Klasse TEdit in Unit Main castten. Das willst du aber gar nicht. Was du möchtest ist, die Komponente in deinem anderen Formular finden.
Dann musst du aber auch FindComponent dieses Formulars aufrufen und nicht das deines eigenen Formulars. Sprich Main.FindComponent.
Besser wäre aber so etwas:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TOnSelectEntry = procedure(Sender: TObject; const ANewValue: String) of object;
TPausMusik = class(TForm) private FOnSelectEntry: TOnSelectEntry; public property OnSelectEntry: TOnSelectEntry read FOnSelectEntry write FOnSelectEntry; end;
...
procedure TPausMusik.ListBox1DblClick(Sender: TObject); begin if Assigned(FOnSelectEntry) then FOnSelectEntry(Self, 'Eintrag'); end; |
Und in deinem Hauptformular:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type TMain = class(TForm) protected procedure SelectEntryEvent(Sender: TObject; const ANewValue: String); end;
PausMusik.OnSelectEntry := SelectEntryEvent;
procedure TMain.SelectEntryEvent(Sender: TObject; const ANewValue: String); begin Edit1.Text := ANewValue; end; |
Auf die Weise muss das zweite Formular dein erstes gar nicht kennen, könnte also auch z.B. an anderer Stelle benutzt werden.