![]() |
Zwischen dynamischen Forms kommunizieren
Hallo zusammen,
stecke wieder fest und komme nicht auf die lössung, ich möchte gerne zwischen 2 dynamisch erzeugten forms kommunizieren: das heist auf ein bestimmten Feld von der Form1 in die Form2 kopieren, focus setzen oder auslesen. leider bekomme ich diese fehler meldung. --------------------------- Benachrichtigung über Debugger-Exception --------------------------- Im Projekt ERP.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x0087b67b: read of address 0x000003a8' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- hat jemand eine lössung für mich? mercy |
AW: Zwischen dynamischen Forms kommunizieren
Ohne etwas Quelltext kann dir da niemand konkret helfen, aber ich vermute, dass du die Instanzen durcheinander bringst. Sprich auf eine Formularvariable zugreifst, dessen Formular gar nicht da ist.
Richtig wäre z.B.:
Delphi-Quellcode:
var
SecondForm: TSecondForm; begin SecondForm := TSecondForm.Create(nil); try SecondForm.OnExampleChange := ExampleChangeEvent; if IsPositiveResult(SecondForm.ShowModal) then DoSomethingWith(SecondForm.ExampleResult); finally SecondForm.Free; end; end; |
AW: Zwischen dynamischen Forms kommunizieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Jaenicke,
da hast du recht ohne ein wenig quellcode und ohne Glasskugel wird es sehr schwer :) haenge mal ein bsp als anhang. ein schönen WE |
AW: Zwischen dynamischen Forms kommunizieren
Hallo,
ich kann aus dem Quellcode nicht erschließen was Du eigentlich erreichen möchtest (vermutlich nur so ein Testballon). Aber: Dass Deine Vorgehensweise "in die Hose gehen muss" ist schon klar - oder?. Mit
Delphi-Quellcode:
- die Prüfung
PCForm := aForm.Create (TabSheet);
Delphi-Quellcode:
ist eigentlich unnötig wie ein Kropf - erstellst Du zwar jeweils eine Instanz von TForm2 bzw. TForm3, aber der Compiler stellt Dir doch da keine automatische Zuordnung PCForm zur Variable Form2 bzw. Form3 her (das müsstest Du schon selbst übernehmen); dementsprechend bleiben diese beiden Variablen nun mal nicht initialisiert - und damit muss es beim Zugriff auch scheppern.
if Assigned(aForm) then
Vielleicht erklärst Du erst mal was Du eigentlich vor hast und letztlich erreichen möchtest; gekoppelt an die Frage: "Wie könnte man das dann elegant lösen?" Gruß |
AW: Zwischen dynamischen Forms kommunizieren
Hallo Volker,
ja der quellcode ist nur ein test, da ich einige VLC benutze, würde es bei viele nicht laufen. der Zweck an sich, ist es wenn man die Form3 bearbeitet und möchtet man gerne die werte aus der Form2.Edit1.Text auslesen, oder auf die Form2 springen und den focus auf ein bestimmten Feld setzen, z.B wenn man ein neuen Datensatz anlegt, das der focus zur der KND-Nr springt. Was ich erreichen will? Ich möchte eine application machen wo alle Forms in ein Pagecontrol(Tabsheets) zu sehen sind und bei bedarf auf ein bestimmten Tabsheets springen und auf ein bestimmten edit den focus setzen. Wie du schon sagst "Wie könnte man das dann elegant lösen?" oder was muss ich machen das einer Zuordnung stat findet? |
AW: Zwischen dynamischen Forms kommunizieren
Dafür benötigst du doch keine weiteren Forms, das kannst du alles in einem einzigen Formular erledigen. Platziere deine Eingabe-Formulare (nicht Forms, sondern die zu einem Formular angeordneten Eingabefelder) jeweils auf verschiedenen Tabsheets und gut ist. Wozu eigene Forms, die dann sowieso in Tabsheets eingebettet sein sollen?
Davon abgesehen stellt es einen äußerst schlechten Programmierstil dar, wenn man Daten aus Editfeldern anderer Forms auslesen muß, um gewisse Berechnungen beginnen zu können. Daten sollten zentral verwaltet werden, so daß sie von allen benötigten Forms aus erreichbar sind. |
AW: Zwischen dynamischen Forms kommunizieren
Es macht durchaus Sinn mit mehreren Formularen zu arbeiten, gerade dann, wenn die Anzahl der TabSheets dynamisch sein kann, oder es sonst zu komplex werden würde (Monster-Formular).
Allerdings sollte man niemals von aussen auf die konkreten Elemente zugreifen um ein bestimmtes Verhalten zu bekommen. Wenn das Formular x in die Grundstellung soll, dann erstellt man dort eine Methode Grundstellung die von aussen aufgerufen wird. Das Formular selber, weiß wie es diese Grundstellung zu erledigen hat. Auf die Daten greift man auch nicht direkt zu, sondern entweder über Properties oder über ein ein entsprechendes Datenobjekt, was die Daten der Form beinhaltet. Änderungen in der form gehen in das Datenobjekt und Änderungen am Datenobjekt werden in der Form angezeigt. |
AW: Zwischen dynamischen Forms kommunizieren
Hallo,
Zitat:
Aber jetzt zu etwas konstruktiverem: Wie Sir Rufo schon richtig anmerkte sollte der Zugriff auf Eigenschaften eines Forms nun wirklich nicht von außen erfolgen. Du solltest Dir Schnittstellen in Deinem MainForm definieren, so dass die "eingebetteten Formulare" (Formulare auf den TabSheets) auf diese Schnittstellen zugreifen können (eventuelle Zustandsänderungen o. ä. melden) und das MainForm dann entsprechend "alle anderen Forms" informiert. Dazu müssten natürlich die eingebetteten Formulare die notwendigen Schnittstellen bereitstellen. Wege dies zu erreichen gibt es viele. Was für Dich am günstigsten wäre, kann ich nur raten - leider. Gruß |
AW: Zwischen dynamischen Forms kommunizieren
Hallo zusammen,
@Perlsau Zitat:
Zitat:
@Sir Rufo Zitat:
@Volker Z. aber bitte nur bei Vollmond :) werde mal Sir Rufo's rat mal folgen. besten dank an alle |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:44 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