"Unterform" Button gedrueckt - welcher ?
-
Hallo.
Ich hab also mein MAINFORM und eine "Unterform" die aus der MAINFORM mittels ShowModal() aufgerufen wird.
In der Unterform habe ich 2 Button.
Ich moechte gerne in der MAINFORM wissen, welchen der beiden Button ich gedruckt habe. Wie bekomme ich das raus ?
Suchen hat mir dabei hier im Forum nicht weiterhelfen koennen ...MbD msgbeep
-
Einfach über die Buttons-Ereignisse, die du in der MainForm abfangen muss, oder du schickst eine Message an die MainForm mit (SendMessage/PostMessage), wenn ein Button gedruckt wird.
-
Du kannst doch im modalen Form die Eigenschaft ModalResult stzen, je nach gedrücktem Button. Der Wert wird von ShowModal() zurückgeliefert!
-
msgbeep,
oder Du erstellst Dir in Deinem Unterform eine Member-Variable, die Dir sagt, über welchen Button das Formular geöffnet wurde. Mußt Du dann vor ShowModal natürlich selbst zuweisen.
---Edit---------
Klasse, wieder mal falsch gelesen!
Vergiß, was da oben steht. ModalResult ist Dein Freund.
-
hallo,
also die vcl sieht für genau diesen fall das vor, das der "DerAltenburger" gesagt hat. due hast zwei buttons, wahrscheinlich einen "OK" und einen "Abbrechen" button. hab ich recht oder hab ich recht? jetzt gehst du her und stellts für den "ok" button folgende propertys ein:
-default = true
-modalresult = mrOk
für den "abbrechen" button
-cancel = true
-modalresult = mrCanceldann rufst du diesen dialog in deiner hauptform folgendermassen auf:
void __fastcall TForm1::Button1Click(TObject *Sender) { if (Form2->ShowModal() == mrOk) { //Der Dialog wurde mit Ok verlassen, alles codieren... ShowMessage("OK"); } else { ShowMessage("Cancel"); //Der Dialog wurde mit Abbrechen verlassen ... } }
in beiden fällen wird der dialog geschlossen. natürlich kann man auch noch zig andere sachen machen, aber diese würden bei deinem glasklaren fall völliger unsinn sein. auf diese art wertet man mit der vcl einen modalen dialog beim verlassen aus, alles andere ist für zusätzliche dinge, die über dies hinausgehen...
mfg
murphy
-
Danke fuer die Hilfe.
Ich hab leider noch nicht viel Erfahrung mit dem Objectinspector gemacht. Deshalb
weiss ich auch nicht, was ich dort alles fuer Einstellmoeglichkeiten hab. Schade
ist nur, dass ich was ich dort einstelle, nicht im Code gespeichert ist. Na
jedenfalls nicht in einer cpp Datei... (egal).
Aber mit ModalResult klappt es richtig gut.Danke nochmals an alle...
Werde wohl in Zukunft mal mehr damit experiementieren.
msgbeep
-
Wieso sollte das im Code eingestellt werden? bzw. Was erhoffst du dir davon?
Erfahrungen mit dem Objektinspektor brauchst du nicht gross zu machen. Brauchst nur die Augen zu öffnen und hald mal ein Bischen mit der IDE zu arbeiten und nicht nur ein paar Kompos zusammen klicken. F1 ist übrigens auch immer wieder dein Freund, wenn du mal nicht weisst, was eine Eigenschaft im OI genau bewirkt...
-junix
-
hallo,
@msgbeep:
gerade der objectinspektor ist der segen eines jeden borländers :-)...
aber ich weiss was du meinst. die vcl verwendet momentan zum speichern dieses "codes" sogenannte *.dfm dateien die ein spezielle scrip-sprache verwenden um den formularaufbau festzuhalten. öffne mal ein neues projekt und mach einen button auf das form, dann weist du dem button in der Tag property den wert 5 zu. nun klickst du mit rechts auf die form und sagst, "Ansicht als Text", und schon siehst du das form, den button in textform. es sind hier aber nicht alle eigenschaften enthalten, das viele mit standardwerten vorinitialisiert sind, es werden nur die festgehalten die von diesem standard (durch user-zuweisung) abweichen. zurück zum form kommst du ebenfalls über das kontext menü "Ansicht als Formular". dies alles funktioniert aber nur, wenn die option "Text-DFM" aktiviert ist, denn ansonsten wird der formularaufbau nicht als text sondern in binärer form gespeichert.in den neuen dotnet umgebungen wie etwa c#builder gibt es keine trennung mehr zwischen formular-datei und quellcodedatei, da werden quasi die einstellungen die man im objectinspektor macht direkt in den code übernommen. jedoch haben beide systeme ihre vor und nachteile. ich finde das dfm-system eigentlich sehr gut. wenn man in einem projekt mal ein form nicht aufbekommt, kann man von der fehlermeldung ausgehend die datei als textdatei öffnen und im editor den fehler beseitigen...
mfg
murph