![]() |
Problem bei weiterleiten nach Unit 2
Hi leuts,
bin im Moment dabei ein Adressbuch zu programieren (per VCL-Anwendung). Nun habe ich beschlossen, die TEdit-Felder für dass hinzufügen einer Adresse in eine eigene Unit aus zu gliedern, damit nit der ganze Wulst von Anzeige, Hinzufügen und Suchen in einer Form drin ist. Das Problem ist nur dass jedes mal, wenn ich auf den Button klicke, der die Form mit den Hinzufügen öffnen soll, eine Fehlermeldung über eine Zugriffsverletzung kommt. Ich Schrieb euch unten mal den Quellcode hin, der für die Weiterleitug und die Verarbeitung sorgen soll. ich hoffe ihr könnt mit Helfen gruß DutchmanTom
Delphi-Quellcode:
procedure TForm1.BtnHinzuClick(Sender: TObject);
begin Form2.show; if Form2.showmodal=mrok then begin AdresseAnlegen(EdVorname.Text, EdNachname.Text, EdJob.Text, EdStrasse.Text, EdOrt.Text, EdTelefon.Text); end; end; |
Re: Problem bei weiterleiten nach Unit 2
Telefonbuch? Deja'vu... egal...wo genau kommt denn die Fehlermeldung und kann es sein, dass du das Formular quasi zwei mal öffnest? einmal mit Form2.show und dann nochmal mit form2.showmodal?
|
Re: Problem bei weiterleiten nach Unit 2
Du kannst das Form nicht erst nicht-Modal anzeigen (.Show) und dann das bereits angezeigte Form nochmal Modal anzeigen (.ShowModal).
Und dann ist das zugreifen auf Elemente des anderen Forms auch nicht wirklich sauber. Ich würde das so machen:
Delphi-Quellcode:
Wobei Adressdaten ein Record ist, der alle Adressfelder besitzt, die Du derzeit einzeln übergibst.
var inputForm: TForm2;
var AdressDaten: TAdressDatenRecord; begin inputForm := TForm2.Create(AdressDaten); try if inputForm.ShowModal = mrOk then begin AdresseAnlegen(AdressDaten); end; finally FreeAndNil(inputForm); end; end; Form2 füllt bei einem Klick auf okay diesen Record (der im Constructor schon übergeben wird) mit den Daten aus den Input-Feldern. Das hat dann auch noch gleich den Vorteil, dass Dein Code die Felder im Form zwei gar nicht kennen muss. |
Re: Problem bei weiterleiten nach Unit 2
Danke für deine Version, ich habe sie mal eingebaut und Delphi mekert zumindest mien compilieren mal nicht ^^
Jetzt ist aber auf einmal ein anderes Problem aufgetreten. Nämlich wird beim Compilieren in der Zeile
Delphi-Quellcode:
das "TForm1" unterstrichen und ich bekomme die Meldung
procedure TForm1.LBAdressenClick(Sender: TObject);
Zitat:
Das einzige was ich gemacht habe war, meine Version durch die oben genannte zu ersetzen. Versteht das einer? mfg Tom |
Re: Problem bei weiterleiten nach Unit 2
Hast du vielleicht oberhalb von der Stelle den Code von Phoenix eingebaut, und evtl irgendwie ein "end;" vergessen oder den procedure-kopf?
So wie Phoenix es gemacht hat, kann man es machen...man muss es aber nicht, ich finde es gerade für Anfänger sinnvoller, wenn Form2 zum Programmstart erstellt wird, und der Programmierer es einfach mit form2.showmodal aufruft, anstatt jedes mal eine neue Instanz von Form2 zu erstellen und hinterher wieder zu löschen :) Evtl reicht es also, wenn du deinen Originalcode wieder hernimmst und einfach das "form2.show;" entfernst... |
Re: Problem bei weiterleiten nach Unit 2
ok, es hat wirklich das "end;" gefehlt.
nur bekomm ich jetz bei beiden versionen (phönix / alleinherrscher) wieder die zugriffsverletzung sobald ich das 2. fenster starten will :( |
Re: Problem bei weiterleiten nach Unit 2
Ist die Form2 denn am Programmstart erstellt worden? Also steht in der Project1.dpr datei ein "Application.CreateForm(TForm2, Form2);"?
|
Re: Problem bei weiterleiten nach Unit 2
mienste das hier?
Delphi-Quellcode:
uses
Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; |
Re: Problem bei weiterleiten nach Unit 2
Fast...n bisschen weiter unten müssten form1 und form2 erstellt werden:
Delphi-Quellcode:
program Project1;
uses Forms, Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); //das hier Application.Run; end. |
Re: Problem bei weiterleiten nach Unit 2
Mit der lieben Hilfe des Chefs der Firma wo ich Praktikum mache, ist jetzt endlich eine funktionierende Variant bei herrausgekommen
Quellcode in der Hauptform:
Delphi-Quellcode:
procedure TForm1.BtnHinzuClick(Sender: TObject);
var aForm: TForm2; begin try aForm := TForm2.Create(self); if aForm.showmodal=mrOK then begin AdresseAnlegen(aForm.Vorname, aForm.Nachname, aForm.Job, aForm.Strasse, aForm.Ort, aForm.Telefon); end; finally aForm.Free; end; end; Dazugehöhriger Code der Nebenform:
Delphi-Quellcode:
An dieser Stelle meine Dank an Phönix und Alleinherrscher :hello:
procedure TForm2.BtnHinzuClick(Sender: TObject);
begin if MessageDlg('Soll die Adresskarte gespeichert werden?', mtConfirmation,[mbYes,mbNo], 0 ) = mrYes then begin vorname := EdVorname.Text; Nachname := EdNachname.Text; Job := EdJob.Text; Strasse := EdStrasse.Text; Ort := EdOrt.Text; Telefon := EdTelefon.Text; self.ModalResult := mrOK; end else self.ModalResult := mrCancel; end; gruß DutchmanTom |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 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