Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Anfängerfrage: Form über Button schließen und neues öffnen
Morpheus1572 - So 15.03.09 14:04
Titel: Anfängerfrage: Form über Button schließen und neues öffnen
Moin,
ich möchte mittels eines Buttons das aktive Form schließen und ein anderes Form öffnen.
ich dachte mir, ich "verknüpfe" den Button mit der Procedure FormClose(Sender: TObject; var Action: TCloseAction), daran scheitere ich jedoch schon, weil mir nicht klar ist, wie ich diese Procedure anspreche.
und wie kann ich dann das andere form öffnen?
Gruß Morph.
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am So 15.03.2009 um 13:34
jaenicke - So 15.03.09 14:19
Morpheus1572 hat folgendes geschrieben : |
ich dachte mir, ich "verknüpfe" den Button mit der Procedure FormClose(Sender: TObject; var Action: TCloseAction), daran scheitere ich jedoch schon, weil mir nicht klar ist, wie ich diese Procedure anspreche. |
Dein FormClose ist die Ereignisbehandlungsroutine, in der du Aktionen durchführen kannst als Reaktion auf das Schließen des Fensters.
Wenn es sich um das Hauptfenster handelt, schließt du damit das gesamte Programm.
Es gibt auch Hide und Show / ShowModal.
Morpheus1572 hat folgendes geschrieben : |
und wie kann ich dann das andere form öffnen? |
Delphi-Quelltext
1: 2: 3: 4:
| FormX.Show; FormX.ShowModal; |
freak4fun - So 15.03.09 14:21
Genau. Kannst du kurz darlegen, warum du das Hauptformular scjließen willst?
ffgorcky - So 15.03.09 15:25
Hallo Morpheus,
also erst mal würde ich auf den Button auf dem Formular doppelklicken,
dadurch erscheint dann die Prozedur ButtonOnClick(Sender: TObject).
Dort brauchst Du dann nur noch "Form1.Close();"(ohne die Hochkommas) eingeben um das Fenster - also in dem Fall sogar das Programm - in der Laufzeit zu schließen/beenden.
Aber - wie schon von den anderen aufgeführt - wenn Du das Hauptfenster schließt, beendest Du die ganze Anwendung!
Also würde ich empfehlen, dass Du dann lieber zwei Panels übereinander anlegst (worauf Du Deine Komponenten platzierst) und dann das obere je nach Anforderung (un-)sichtbar machst.
jaenicke - So 15.03.09 15:27
ffgorcky hat folgendes geschrieben : |
Dort brauchst Du dann nur noch "Form1.Close(Sender);" (ohne die Hochkommas) eingeben |
Close hat keine Parameter und im Formular selbst Form1. zu benutzen ist keine gute Idee, weil sich das dann auf die Instanz in der Variable statt immer auf die eigene Instanz bezieht...
Morpheus1572 - So 15.03.09 16:28
okay. ich habe mich wohl falsch ausgedrückt.
ich will nicht das form1 schließen!!!!!
ich möchte mittels eines buttons (aus dem aktuellen kindfensterder) mich automatisch in ein anderes kindfenster hineinbeamen. das aktuelle kindfenster (form2) soll sich also ersatzlos schließen und das andere Kindfenster (form3) öffnen..
Morph.
@jaenicke: darf ich dich speziell noch mal bitten auf folgenden link zu sehen?
http://www.delphi-forum.de/viewtopic.php?p=553901#553901
jaenicke - So 15.03.09 16:56
Delphi-Quelltext
1: 2: 3:
| Form2.Close; Form3 := TForm3.Create(Application.MainForm); Form3.Show; |
Und in OnClose kannst du mit
Action := caFree; das Fenster auch freigeben beim Schließen.
Morpheus1572 - So 15.03.09 17:15
funzt soweit nur...
wenn ich das so umsetze geht er auch in das neue form. er macht das form.create korrekt und auch geht auch in das form.show. dort rufe ich eine procedure zum füllen von dbgrids auf. davor habe ich zur kontrolle - wie weit er geht - ein showmessage. das zeigt er mir noch an. aber sobald ich ok drücke bekomme ich nen abstrakten fehler.
was mache ich falsch?
jaenicke - So 15.03.09 17:49
Dann erstellst du eine Instanz einer Klasse, die abstrakte (nicht implementierte) Teile (Prozeduren, Funktionen) enthält. Ein Beispiel wäre, wenn du TStrings direkt benutzt statt TStringList.
Ohne mehr Code kann ich aber natürlich nichts genaueres sagen.
Morpheus1572 - So 15.03.09 18:12
oki.
hiermit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure THauptformular.Tourenplanung(Sender: TObject); begin Panel1.Visible:=false; <--- ausblenden weil teilweise sichtbar wenn child drüber liegt, warum weis ich nicht bearbeiten1.Enabled:=true; <--- Menüeintrag wird wieder sichtbar gemacht (noch alte version) Tourenplan.Enabled:=false; <--- Menüeintrag wird ausgegraut (noch alte verion) TForm8.Create(Self); <--- ich rufe das KindFenster Form8 auf end; |
rufe ich vom Form8 auf.
in Form8 existiert ein button3, der wie gesagt das Form8 schließen soll und Form3 öffnen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm8.Button3Click(Sender: TObject); begin Close; <--- schließt wohl das Form8 Form3 := TForm3.Create(Application.MainForm); <--- ist von dir übernommen Form3.Show; <--- ist von dir übernommen end; |
in der OnClose-Geschichte von Form8 steht folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm8.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; <--- Schließt das Form und gibt es wieder frei Hauptformular.Panel1.Visible:=true; <--- macht mir das Panel1 des Hauptformulares wider sichtbar Hauptformular.Tourenplan.Enabled:=True; <--- aktiviert wieder den Menüpunkt für das Form8 end; |
wenn ich das genau so lasse bekomme ich mittlerweile keine fehlermeldung mehr (nachdem ich das ShowMessage entfernt habe) ABER:
ich sehe mein Haupformular und sonst nichts. darüber hinaus habe ich nun noch in der grauen leiste unter der eigentlichen Menüleiste auch wieder die zeichen "Minimieren" "Maximieren" und das x. demnach gehe ich davon aus, dass ein kindfenster aufgebaut ist. aber ich sehe es nicht...
Morpheus1572 - So 15.03.09 18:18
okay okay okay.
je öfter ich meinen text von eben durchgelesen habe, hat es bei mir geleuchtet!!!
es lag an der art und weise, wann ich mein panel1 ausblende. ich habe es immer nur beim verlassen vom Hauptformular unsichtbar gemacht.
den befehl einfach ins formcreat des nächsten forms verschoben und schon wird alles sichtbar... :oops: :roll: :roll: :oops:
...bleibt nur noch das andere problem jaenicke.... :lol:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!