![]() |
Re: 2 Formulare Variabeln Übergabe
Delphi-Quellcode:
das kann nicht gehen!
procedure TFMain.BtnAuswahlClick(Sender: TObject);
var FAuswahl:TFAuswahl; begin FAuswahl:=TFAuswahl.Create(Self); (*init*) try FAuswahl.SetAuswahlText(EdAuswahl.Text); if FAuswahl.ShowModal = mrOK then EdAuswahl.Text:=FAuswahl.GetAuswahlText; finally (*Darunter immer ausfuehren*) FAuswahl.Release; (*Abschnitt(Form) aufrufbar*) end; end; FAuswahl ist ja bereits im 2. Unit vorhanden (das ist das 2. Formular) Wenn du nun innerhalb einer procedure nochmal eine Variable gleichen Namens definierst, kennt die procedure nur die interne Variable und weiß nicht, dass du die aus der 2. Unit meinst. Also alles raus, was var FAuswahl:TFAuswahl heißt Außerdem: Ich nehme mal an, dass du das Formular ganz normal mit Datei|Neu|Formular erzeugt hast. Dann übernimmt das Hauptprogramm auch das Create desselben und du brauchst dich nicht drum zu kümmern. Also TFAuswahl.Create auch raus! (und entsprechend auch FAuswahl.Release) Dann bleibt übrig:
Delphi-Quellcode:
Statt SetAuswahlText(..) und GetAuswahlText könnte man auch
procedure TFMain.BtnAuswahlClick(Sender: TObject);
begin with FAuswahl do begin SetAuswahlText(EdAuswahl.Text); ShowModal; if ModalResult=mrOk then begin EdAuswahl.Text:=FAuswahl.GetAuswahlText; ... // weitere Statements end; end; end; procedure TFMain.Button1Click(Sender: TObject); var a:integer; begin a:=FAuswahl.test; Label1.Caption:=inttostr(a); end; usw. FAuswahl.CoAuswahl.ItemIndex bzw. FAuswahl.CoAuswahl.Text direkt ansprechen. Hast du bei den beiden Buttons in Formular 2 (FAuswahl) das ModalResult richtig belegt oder Default/Cancel=True gesetzt? |
Re: 2 Formulare Variabeln Übergabe
Zitat:
|
Re: 2 Formulare Variabeln Übergabe
Zitat:
Da hätte ICH mir lieber mal die Brille putzen sollen! Dann stimmt das alles natürlich nicht mehr, was ich geschrieben habe! Außer, man nutzt den Weg, wie er normalerweise von Delphi bereits erzeugt wird über Datei|Neu|Formular (da war ich wohl ein bisschen zu sehr drauf fixiert) Edit: Und das halte ich für jemanden, der sich noch nicht so richtig sicher ist, auch für den besseren Weg. @thomasku: Zum besseren Verständnis: Wenn du ein neues Formular entwirfst, ist es normalerweise nicht sofort sichtbar, sondern es gibt ein Hauptformular, das zum Start angezeigt wird. Die eigentliche Programmdatei (xy.dpr) enthält die Aufrufe, die für die Erzeugung erforderlich sind. Wenn du aus dem Hauptformular das zweite Formular mit ShowModal aufrufst, wird dieses 2. Formular sichtbar und kann bearbeitet werden. Wenn es geschlossen wird, ist es wieder unsichtbar, d.h. das, was du ursprünglich beabsichtigt hast, nämlich Visible ein- und auszuschalten, kannst du dir sparen. Du landest so automatisch wieder in Formular 1. |
Re: 2 Formulare Variabeln Übergabe
Hallo Globetrotter77 und Deddy H und vielen Dank für eure Antworten.
Das gepostete Programm ist wie gesagt eine Erweiterung und Kommentierung des Programms welches mir Omata in Beitrag #4 gegeben hat. Der von euch diskutierte Teil ist von Omata geschrieben, meine Erweiterungen sind dann jeweils die Funktionen und Prozeduren i),ii),iii) bzw. die Globale Variable. Persönlich würde ich auch wie beschrieben Grundsätzlich ein neues Formular erzeugen. (Also Datei|Neu|Formular bzw den Button benutzen) Zitat:
LG |
Re: 2 Formulare Variabeln Übergabe
Zitat:
Aber ModalResult sollte gesetzt werden, jedenfalls dann, wenn das Formular nach Knopfdruck tatsächlich geschlossen werden soll! Und du kannst das selber feststellen, indem du beim Entwurf das 2. Formular aufmachst, den jeweiligen Button anklickst und dann im Object Inspector die Eigenschaft ModalResult suchst. Markier sie einfach mal und drück dann F1. |
Re: 2 Formulare Variabeln Übergabe
Hallo Globetrotter77 und vielen Dank für die Antwort.
Sollte natürlich kann heißen (nicht kannst) :oops: Bin derzeit noch bei den ersten Anfängen und wollte nur die Grundlagen der Formularübergabe verstehen. Werde mich sicher noch mit den Modul- result und Show auseinandersetzen allerdings sehe ich derzeit noch nicht diese Stufe. Zitat:
|
Re: 2 Formulare Variabeln Übergabe
Zitat:
Alle Angaben in geschweiften Klammern werden als Kommentar gewertet, es sei denn, sie beginnen mit {$...} Zitat aus der Online-Hilfe (Compiler-Direktiven (Delphi)): Zitat:
Zitat:
i) Hier wird einer Procedure-internen Variablen a ein Wert zugewiesen, nämlich der, der aktuell in FAuswahl in der Variablen test steht. Dieser wird dann als Text in Label1 angezeigt. Wenn allerdings die Variable test noch nicht belegt wurde, ist das Ergebnis auch unbestimmt. ii) Hier wird die Procedure-interne Variable a als Parameter an eine Routine im anderen Formular übergeben. Nachdem sie nicht gesetzt wurde, ist das Ergebnis unbestimmt. Dies würde auch gelten, wenn du sie an eine lokale Procedure übergeben würdest. iii) dto. Und unbestimmt heißt meistens "richtiger Schrott"! Was halt gerade an dieser Speicherstelle war ... |
Re: 2 Formulare Variabeln Übergabe
Hallo Globetrotter77 und vielen Dank für deine Antwort.
Das mit dem Kommentar ist mir nun klar, Danke. (Also noch nicht das mit § aber ich hoffe das dies irgendwann noch kommt :D ) zu i) Ich dachte das ich in Form2 (Auswahl) durch den Button1 'test' den Wert 1 zuweisen kann nur dieser Wert wird leider nicht übergeben. zu ii) Wie meinen Sie/(Du) das diese nicht gesetzt wurde? Gerade verwirrend für mich an dieser Variante ist das es als Referenzparameter ( iii) ) funktioniert allerdings nicht als Werteparameter. Wenn ich procedure test2 bzw function test2b aufrufe bekomme ich einen beliebigen Wert, jedoch test3 sowie test3b liefern ihre Werte. Lg //edit letzte Zeile überlesen! Ich dachte nun gerade das ich mit den Funktionen und Prozeduren die Werte setze? Also zu mind mit test2 und test2b |
Re: 2 Formulare Variabeln Übergabe
Zitat:
Zitat:
man sollte grundsätzlich keine Parameter übergeben, die nicht 100%ig initialisiert wurden! deshalb sollte man auch niemals darauf hoffen, dass an anderer Stelle dafür gesorgt wurde (z.B. durch ButtonClick)! |
Re: 2 Formulare Variabeln Übergabe
Hallo und vielen Dank wieder.
Mmh leider verstehe ich nicht, warum diese nicht initialisiert wurden sind? Ich Weise doch in jeder Prozedur bzw Funktion welche ich Aufrufe, den Parametern einen festen Wert zu. Sorry für die dummen Fragen... Lg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:36 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