AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi überkreuzender Bezug von Units .. kleiner Workaround
Thema durchsuchen
Ansicht
Themen-Optionen

überkreuzender Bezug von Units .. kleiner Workaround

Ein Thema von stoxx · begonnen am 24. Sep 2007 · letzter Beitrag vom 26. Sep 2007
 
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: überkreuzender Bezug von Units .. kleiner Workaround

  Alt 26. Sep 2007, 08:35
Dann löse dieses Dilemma mit Events. So ein Frame muss doch nicht wissen, das es auf einer TFoobarForm ist. Wozu dann ein Frame? Der Sinn eines Frames ist doch, das man es wieder verwenden kann. Aber so sind die beiden Klassen wirklich untrennbar verbunden.

Es ist doch bestimmt so, das dein Hauptformular irgendetwas machen muss, wenn sich im Frame Daten ändern. Und Du veränderst die Daten der Hauptform im Code/Kontext des Frames.

Es ist praktischer, wenn das Frame seinem Eigentümer (oder wer auch immer das wissen will), Bescheid gibt, wenn sich etwas ändert. Dann kann der Eigentümer angemessen darauf reagieren, das Frame muss gar nichts über ihn wissen und alle (vor allen Dingen die OOP-Gemeinde) sind zufrieden.

Du kannst das dann sehr leicht mit Events lösen:
Spendiere dem Frame ein Event 'OnDataChanged' mit einem Parameter, der besagt, WAS geändert wurde, etwa so:

Delphi-Quellcode:
Type
  TDataOnFrameChangedEvent = Procedure (Sender : TObject; aControl : TControl);
Und dann weist Du jedem OnChange-Event deiner Eingabefelder auf dem Frame diese Methode zu:
Delphi-Quellcode:
Procedure TMyFrame.DataOnFrameChanged (Sender : TObject);
Begin
  If Assigned (fDataOnFrameChanged) And (Sender Is TControl) Then
    fDataOnFrameChangedEvent (Self, TControl (Sender));
End;
In Deinem Hauptformular erzeugst Du dir so eine Methode, implementierst *dort* die vorzunehmenden Aktionen und weist im FormCreate dem Frame-Ereignis diese Methode zu:
Delphi-Quellcode:
Procedure TMyMainForm.ReactOnDataChanged (Sender : TObject; aControl : TControl);
Begin
  If Sender = frmMyFrame Then
    If aControl = frmMyFrame.edVorname Then
      ShowMEssage(Format ('Der Vorname wurde in %s geändert',[TEdit (aControl).Text]));
End;

Procedure TMyMainForm.FormCreate (Sender : TObject);
Begin
  ...
  frmMyFrame.OnDataOnFrameChangted := ReactOnDataChanged
End;
Wenn sich im Frame nun etwas ändert, wird immer die Methode 'ReactOnDataChanged' über den Event-Mechanismus aufgerufen.

Ich finde diese Lösung auch deswegen besser, weil alle Aktionen, die Du im Hauptformulat in Abhängigkeit des Frames ausführst, in der Methode 'ReactOnDataChanged' konzentriert und an einer Stelle implementiert sind. Das ist übersichtlich und einfacher wartbar.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz