Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Edit in anderer Form finden


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
  //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 - 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: 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:

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.