Autor Beitrag
beanbear6
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 02.02.14 11:30 
Hallo,

ich hab hier mal was versucht und grüble mich dumm und dämlich... Warum geht das so nicht??

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TPausMusik.ListBox1DblClick(Sender: TObject);
var i : Integer;
begin
  //Das funktioniert...
  Main.Edit1.Text := 'Eintrag';

  // Warum geht das nicht???????????????
  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 user profile iconMartok: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am So 02.02.2014 um 19:57
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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: Stringof 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:
ausblenden 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;

// vor dem Anzeigen des zweiten Fensters
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.