Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Kann nicht auf Komponente auf anderer Form zugreifen? (https://www.delphipraxis.net/171617-kann-nicht-auf-komponente-auf-anderer-form-zugreifen.html)

Mazen 15. Nov 2012 12:53

Delphi-Version: 7

Kann nicht auf Komponente auf anderer Form zugreifen?
 
Es geht dabei um ein Projekt was ich nicht selbst programmiert habe, sondern ein Kollege der aber mittlerweile nicht mehr hier arbeitet, also weiß ich nciht genau was er hier gemacht hat.

Ich habe das Projekt um die Unit "uFahrer" erweitert. "uFahrer" steht in der Uses-Liste der Unit "Gate" und wird mit "frmFahrer.ShowModal" aufgerufen.
Nun will ich aus der "uFahrer" ein TEdit-Feld in "Gate" füllen.
Habe also "Gate" in die Uses-Liste von "uFahrer" aufgenommen. Nun ging ich davon aus das ich mit "GateFrame.edFahrer.Text := 'Fahrer'" auf edFahrer zugreifen könnte. Kann ich aber nicht?! ("GateFrame" ist der Name des Formulars)
"Undfinierter Bezeichner: GateFrame" ist die Aussage des Compilers.

Wenn ich mit Strg auf "Gate" klicke in meiner USes-Liste öffnet er auch die richtige Unit, also gehe ich doch davon aus das ihm diese bekannt ist?!

Womit kann das noch zusammenhängen das ich da nicht hinkomme?

DeddyH 15. Nov 2012 13:02

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Und dabei blickst Du noch durch? Wenn sich 2 Units gegenseitig einbinden deutet das fast immer auf schlechtes Design hin. Besser Du entscheidest Dich für eins der beiden und tauschst Daten über eine Property aus.

Mazen 15. Nov 2012 13:06

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Was gibts da nicht zu blicken? Es sind nur 2 Units. uFahrer und Gate.
Gate beinhaltet Eingabefelder für Fahrerdaten. uFahrer bietet eine Liste aller Fahrer die sich im Moment auf dem Gelände befinden. (Es geht dabei nicht nur um den Namen, sondern noch weitere Daten die in verschiedene Felder gefüllt werden müssen. Daher kommt eine Dropdownbox o.ä. nicht in Frage).
in uFahrer habe ich nun meine Tabelle mit den Fahrern. Da mache ich Doppelklick auf einen und die Daten werden ins die richtigen Felder in Gate gefüllt?

Klingt für mich nicht kompliziert. Und im "kleinen maßstab" (Ein Projekt mit nur 2 Forms, die jeweils nur eine TButton und TEdit Komponente enthalten) geht das auch problemlos.

DeddyH 15. Nov 2012 13:08

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Zitat:

Zitat von Mazen (Beitrag 1191295)
Klingt für mich nicht kompliziert. Und im "kleinen maßstab" (Ein Projekt mit nur 2 Forms, die jeweils nur eine TButton und TEdit Komponente enthalten) geht das auch problemlos.

Wozu dann dieser Thread?

Mazen 15. Nov 2012 13:11

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Weils mir nicht viel bringt das ich weiß das es im "kleinen Maßstab" funktioniert.
Es muss auch in meinem richtigen Projekt funktionieren, und nicht nur in meinem kleinen Testprojekt.

Und daher die Frage wodran es noch liegen kann das Form2 Form1 nicht erkennt.

v2afrank 15. Nov 2012 13:11

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Bist Du Dir denn sicher dass GateFrame wirklich der Name des aufrufenden Formulars ist ? Alleine von der Bezeichnung hätte ich auf ein Formular getippt, in dem das Frame liegt, so dass Du das über Formular.Gateframe. aufrufen musst

Mazen 15. Nov 2012 13:17

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Zitat:

Zitat von v2afrank (Beitrag 1191299)
Bist Du Dir denn sicher dass GateFrame wirklich der Name des aufrufenden Formulars ist ? Alleine von der Bezeichnung hätte ich auf ein Formular getippt, in dem das Frame liegt, so dass Du das über Formular.Gateframe. aufrufen musst

Ich muss zugeben das ich bisher noch nie mit Frames gearbeitet habe. Daher bin ich mir schon fast sicher das das hier mein Problem ist.
Dann müsste ich nurnoch rausfinden in welchem Formular das Frame liegt.

DeddyH 15. Nov 2012 13:23

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Mal ein Beispiel für das von mir gemeinte mit 3 Units:
Delphi-Quellcode:
unit uFahrer;

uses ...;

type
  TFahrer = class
    ...
  end;
Delphi-Quellcode:
unit uListenformular;

uses ..., uDetailformular, Fahrer;

...

Detailformular.Fahrer := Fahrer_aus_Liste;
Detailformular.ShowModal;
Delphi-Quellcode:
unit uDetailformular;

uses ..., uFahrer;

type
  TDetailformular = class(TForm)
  ...
  private
    FFahrer: TFahrer;
  public
    property Fahrer: TFahrer read FFahrer write FFahrer;
Somit genügt es, wenn das Listenformular das Detailformular kennt, andersherum muss nicht.

v2afrank 15. Nov 2012 13:29

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Ruf mal über Ansicht die Objekthirachie auf und wähle GateFrame an. Dann siehst Du im Treeview der Objekthirachie ob es ein übergeordnetes Element gibt

Mazen 15. Nov 2012 13:47

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Zitat:

Zitat von DeddyH (Beitrag 1191303)
Mal ein Beispiel für das von mir gemeinte mit 3 Units:
Delphi-Quellcode:
unit uFahrer;

uses ...;

type
  TFahrer = class
    ...
  end;
Delphi-Quellcode:
unit uListenformular;

uses ..., uDetailformular, Fahrer;

...

Detailformular.Fahrer := Fahrer_aus_Liste;
Detailformular.ShowModal;
Delphi-Quellcode:
unit uDetailformular;

uses ..., uFahrer;

type
  TDetailformular = class(TForm)
  ...
  private
    FFahrer: TFahrer;
  public
    property Fahrer: TFahrer read FFahrer write FFahrer;
Somit genügt es, wenn das Listenformular das Detailformular kennt, andersherum muss nicht.

Das kann ich leider nicht ganz nachvollziehen.
Hab auch mit Propertys noch nicht gearbeitet, bin noch relativ neu in Delphi. Ich weiß auch nicht genau was bei dir Listenformular und Detailformular sein soll. Aber meiner Meinung nach machen die Aufrufe so keinen Sinn.

Wenn ich in der unit "Gate" in die objekthierarchie schaue ist "GateFrame" logischerweise ganz oben, ohne übergeordnete Elemente da sich die Objekthierarchie ja nur auf die ausgewählte unit bezieht.

DeddyH 15. Nov 2012 13:49

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Zitat:

Zitat von Mazen (Beitrag 1191295)
in uFahrer habe ich nun meine Tabelle mit den Fahrern. Da mache ich Doppelklick auf einen und die Daten werden ins die richtigen Felder in Gate gefüllt?

Damit ist uFahrer das Listenformular und uGate das Detailformular. Zur Not kann ich aber auch ein Beispiel schreiben.

Mazen 15. Nov 2012 14:02

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Ok, hab ich schon vermutet das es so ist. Daher auch meine Verwirrung.
Wieso ruft das Listenformular denn das Detailformular auf? Das Listenformular wird per Button auf dem Detailformular doch erst per ShowModal geöffnet.

DeddyH 15. Nov 2012 14:05

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Das verstehe ich nun wieder nicht. Ich denke, Du willst Details zum aktuellen Listenelement bearbeiten?

Mazen 15. Nov 2012 14:10

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Nein, so ist es nicht^^ Sry, dann haben wir uns etwas falsch verstanden. Ich versuchs nochmal ;)

Also, ich habe 5 Eingabefelder auf meinem Detailformular (Gate). Diese sind leer, hier wird nichts ausgewählt. Per Klick auf einen Button erhält der benutzer nun eine Liste mit sämtlichen Fahrern die sich zur Zeit auf dem Gelände befinden. Mit Daten wie Name, Vorname, Spedition, Ware, Kennzeichen...
Hier wählt der Benutzer einen Datensatz aus und die Daten werden in die Felder auf dem Detailformulat geladen.

Hoffe so ist es verständlicher was ich will :)

DeddyH 15. Nov 2012 14:18

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dafür gilt das Gesagte aber äquivalent. Ich baue mal schnell ein Beispiel.

[edit] Bitteschön, extra in Delphi 7 ;) [/edit]

Mazen 15. Nov 2012 14:29

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Danke :) Würde mir sicher helfen ;)

DeddyH 15. Nov 2012 14:36

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Siehe mein Edit im letzten Beitrag.

Mazen 15. Nov 2012 14:39

AW: Kann nicht auf Komponente auf anderer Form zugreifen?
 
Vielen Dank :)
Ich werde mir das mal zu Gemüte führen. Ist auf jedenfall genau die Funktionalität die ich brauche ;)

Ich denke mein Problem ist/war das ich noch nicht wirklich objektorientiert programmiert habe in Delphi. Also mit eigenen Klassen und Objekten. Das sollte ich vielleicht mal nachholen und mich da etwas belesen :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz