![]() |
Überprüfen, ob ein Formular offen ist
Hallo,
auf MainForm habe ich einen Button und eine Liste erstellt. Wenn auf den Button gedrückt wird, werden je nachdem wieviele einträge in der List sind, auch soviele Forms mit TStringGrid aufgehen. Wie kann ich das jetzt so machen, dass es vorher überprüft wird ob es Forms schon offen sind, die der Anzahl der Einträge entspricht, wenn ja dann die vorhandenen TStringGrid's löschen, wenn nein dann neu erstellen. Bisher habe ich das so gemacht:
Delphi-Quellcode:
Danke.
var
FormArray :array of TForm1; ... procedure TMainForm.Button1Click(Sender: TObject); begin For i := 0 To MBListBox.items.Count - 1 Do Begin FormArray[i] := TForm1.Create(self); FormArray[i].show; End; End; [edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit] |
Re: Überprüfen, ob einen Formular offen ist
Du kannst in FormCreate dein FormArray mit nil initialisieren. Dann prüfst du nur if (FormArray[i] = nil) then Form_Gibts_Noch_Nicht else Form_Gibts_Schon;
|
Re: Überprüfen, ob ein Formular offen ist
Und wie kann ich in FormCreate mein FormArray mit nil initialisieren?
|
Re: Überprüfen, ob ein Formular offen ist
Schau mal in die Hilfe zu Length() und dynamischen Arrays. Allerdings würde ich wohl statt des Arrays eher eine TObjectList verwenden.
|
Re: Überprüfen, ob ein Formular offen ist
Das folgende Beispiel erstellt 20 Eingabefelder. und greift über FindComponent mit den Namen der Eingabefelder auf die neu erstellten Eingabefelder zu.
Delphi-Quellcode:
----
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; const NamePrefix = 'MyEdit'; begin for i := 1 to 20 do begin TEdit.Create(Self).Name := NamePrefix + IntToStr(i); with TEdit(FindComponent(NamePrefix + IntToStr(i))) do begin Left := 10; Top := i * 20; Parent := self; end; end; end; Die entscheiden zwei Punkte sind NAME und FINDCOMPONENT. Edit: Dein Formular kannst dann über Application.FindComponent wiederfinden. Viele Grüsse, Macci |
Re: Überprüfen, ob ein Formular offen ist
Das ist aber nicht besonders performant.
|
Re: Überprüfen, ob ein Formular offen ist
Wieso nicht? oO
Zugegeben mit einem Array ist es ein wenig performanter, als wenn FindComponent in einer Liste nach einem String suchen muss. Das wars aber auch schon. Selbst wenn sein Proggy ein paar Hundert Forms öffnet, dürfte der Unterschied nicht mal eine Millisekunde ausmachen. |
Re: Überprüfen, ob ein Formular offen ist
Ich meinte, was bringt es, ein Objekt zu erzeugen und dieses direkt im Anschluss über FindComponent zu suchen, anstatt die Eigenschaften sofort zu setzen, solange man es eh "am Wickel hat"?
[edit] Schlechtschreibung [/edit] |
Re: Überprüfen, ob ein Formular offen ist
Achso. Nein, ich meinte eher so:
Delphi-Quellcode:
Greetings,
For i := 0 To MBListBox.items.Count - 1 Do
If Application.FindComponent('Formular'+IntToStr(i)) = nil Then With TForm1.Create(Application) do begin Name := 'Formular' + IntToStr(i); [andere eigenschaften] end; Macci |
Re: Überprüfen, ob ein Formular offen ist
Achso, das ist etwas anderes.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 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