Delphi-PRAXiS
Seite 1 von 2  1 2      

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.
Seite 1 von 2  1 2      

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