![]() |
TForm.Close
Hallo ich bau gerade an einem Programm in dem ich Formulare Dynamisch während der Laufzeit ertelle.
Mein Problem ist jetzt Folgendes also wenn ich das Formular jetzt schliesse
Code:
dann kann ich keine Fenster mit dem gleichen Namen mehr erstellen warum?
Form.Close;
Ist das Fenster nur unsichtbar? Ich habe es auch mit
Code:
versucht aber das liefert nur eine Fehlermeldeung was soll ich tun?
Form.Free;
|
Re: TForm.Close
Bevor du es neu öffnen kannst, musst du logischerweise vorher das Form-Objekt neu erzeugen.
|
Re: TForm.Close
Ja das tue ich auch
Hiermal ein Beispiel aus dem Code:
Code:
Beim ersten mal klappt alles aber wenn ich die Form Schliesse mit
procedure TForm1.irgendwasClick(Sender: TObject);
var TfSU: TfrmSendURL; begin If Application.FindComponent('SUForm') = Nil Then begin Application.CreateForm(TfrmSendURL, TfSU); TfSU.Name:='SUForm'; TfSU.lblUserName.Caption := 'Hahaha'; end else begin (Application.FindComponent('SUForm') As TfrmSendURL).SetFocus; end; end;
Code:
dann sagt er mir beim nächsten Click auf "irgendwas" das man kein Focus auf eine Unsichtbare Form setzen kann.
Close
|
Re: TForm.Close
Also kuck dir mal meinen Code an:
Delphi-Quellcode:
Wenn ich die zweite Form mit Close schließe, kann ich sie direkt mit dem zweiten Button wieder anzeigen lassen.
var
Form1: TForm1; ZweiteForm: TForm; implementation uses Unit2; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Application.CreateForm(TForm2, ZweiteForm); end; procedure TForm1.Button2Click(Sender: TObject); begin if Assigned(ZweiteForm) then ZweiteForm.Show; end; |
Re: TForm.Close
Ja aber das soll nicht der Sin der Sache sein das Fenster soll komplett geschlossen werden das es nicht mehr da ist wenn ich es schliesse damit mit der meiner Methode ein neues erstellt werden kann es soll nur dann den Focus bekommen wenn es irgendwo hinten liegt aber noch nicht geschlossen wurde.
|
Re: TForm.Close
Wenn es nur "hinten" ist dann existiert es ja. Dann frag ab, ob es visible ist. Man müsste dann noch prüfen, ob es minimier (IsIconic) ist.
|
Re: TForm.Close
Mit dem Focus setzen das functioniert ja es gibt nur ein Problem wenn ich es schliesse mit Close dann kann ich kein neues mit dem gleichen Namen erstellen weil das alte ja noch da ist wie kriege ich es ganz weg?
mit Free anstaat Close hab ich auch schon versucht aber ich krieg ne Fehlermeldung. |
Re: TForm.Close
Zitat:
Delphi-Quellcode:
Mit Button1 erzeuge ich die zweite Form. Mit Button2 zeige ich sie an. Wenn ich sie jetzt mit Button3 wieder schließe / freigebe, kann ich sie mit Button1 wieder ohne Probleme erzeugen. Also irgendwas machst du da falsch, aber sehen tue ich es jetzt auch nicht.
var
Form1: TForm1; MyForm2: TForm; implementation {$R *.dfm} uses Unit2; procedure TForm1.Button1Click(Sender: TObject); begin Application.CreateForm(TForm2, MyForm2); end; procedure TForm1.Button2Click(Sender: TObject); begin if Assigned(MyForm2) then MyForm2.Show; end; procedure TForm1.Button3Click(Sender: TObject); begin if Assigned(MyForm2) then MyForm2.Free; end;
Delphi-Quellcode:
Und wenn sie gerade nicht sichtbar ist, bekomme ich sie mit Button4 wieder "nach vorne".
procedure TForm1.Button4Click(Sender: TObject);
begin if (Assigned(MyForm2)) and (MyForm2.Visible) then MyForm2.BringToFront; end; |
Re: TForm.Close
Moin,
ich benutze folgendes:
Delphi-Quellcode:
1.Formular erzeugen
var frmSendURL: TfrmSendURL;
Delphi-Quellcode:
2.Formular anzeigen
Application.CreateForm(TfrmSendURL, frmSendURL);
Delphi-Quellcode:
3.Formular schließen
frmSendURL.Show;
Delphi-Quellcode:
{
frmSendURL.Hide;
anzeigen schließen anzeigen schließen anzeigen } 4. Formular verniechten
Delphi-Quellcode:
oder
frmSendURL.Free;
Delphi-Quellcode:
FreeAndNil(frmSendURL);
|
Re: TForm.Close
Hide macht das Formular nur unsichtbar, schließt es baer nicht, dies tut nur, wie der Name auch schon sagt, Close();.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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 by Thomas Breitkreuz