FormCreate in Delphi problem
Arbeite ich mit einem anderen code, und ich bin das hinzufügen einer neuen form
So, ich habe das Formular erstellt und ich kann es öffnen, verwenden Sie die Schaltflächen und Listen, etc, aber ich habe da ein problem, Dinge zu tun, die auf formcreate.
Ich machen um das Formular zu tun:
procedure TModelForm.RepeatOpen(Sender: TObject);
var
DefForm : TForm5;
begin
DefForm := TForm5.Create(Self);
Self.Visible := False;
try
DefForm.ShowModal;
finally
Self.Visible := True;
DefForm.Release;
end;
end;
in meinem TForm5, ich habe eine Prozedur
procedure TForm5.FormCreate(Sender: TObject);
begin
inherited;
RunList := CModelList.Create;
RunList.ReadData;
RunList.FillList(ListBox1.Items);
end;
aber es tut nichts
Ich habe auch
procedure TForm5.PopulateListClick(Sender: TObject);
begin
RunList := CModelList.Create;
RunList.ReadData;
RunList.FillList(ListBox1.Items);
end;
ist, der einer Taste zugeordnet, und dies tatsächlich funktioniert und füllt meine ListBox
Habe ich es online und wie es scheint, gibt es keine OnCreate-Funktion, es gibt einen Weg, um es zu überschreiben, aber es scheint, wie es sollte ein Weg gefunden werden, einfach definieren, was passiert, wenn der Rahmen zuerst geschaffen
auch der Grund, warum ich bin mit FormCreate ist, weil das ist, was der code mit dem ich arbeite ist zu tun, und es scheint zu funktionieren
Dank!
- Warum nennen Sie "geerbt" in der FormCreate? Ist TForm5 = class (TForm)? Dann ist dies nicht richtig!!!! "Geerbt" genannt werden muss, wenn Sie Ihren eigenen Konstruktor, aber nicht in die Ereignisse! Haben Sie zugewiesen, die Ihre Veranstaltung zu den Formen "OnCreate"?
- nichts falsch mit geerbt, in Veranstaltungen und in der Tat, die IDE macht es für Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meinst du, dass dein Event-Handler nicht ausgeführt?
Wenn ja, hast du vielleicht nur vergessen, zu ordnen Sie die Verfahren, um die Form der OnCreate-Eigenschaft?
Haben Sie wahrscheinlich vergessen, zu ordnen
FormCreate
zuOnCreate
. Ich persönlich würde es tun, durch das überschreiben des Konstruktors und so halten Sie die .dfm Formular aus dem Weg.Nebenbei möchte ich auf den Kommentar-code, den Sie schrieb:
Brauchen Sie nicht, um einen Eigentümer zuweisen
DefForm
da Sie auf die übernahme der Aufgabe der Reinigung, obwohl es generell nicht Schaden, so weisen Sie einen Besitzer. Was mehr ist dietry/finally
ist versuchen zu tun, zwei jobs, aber es kann eigentlich nur eins tun. Der AufrufRelease
ist nicht erforderlich, Sie können einfach anrufenFree
.Ich würde es schreiben wie dieses:
try/finally
mehr tun, als eine Sache infinally
block ?Self
. NurVisible := False; ... Visible := true;
genug sein würde.Self.
, aber für die code Wartbarkeit/Lesbarkeit etwas, das kurz und prägnant reduziert Mehrdeutigkeiten oder sonst mehr ausdrücklich in Ihrer Absicht ist sehr viel Wert, ein paar zusätzliche bytes an code.Self
oderthis
sind in der Regel ein code smell, dass der Autor nicht ganz Begriffen, was Sie tun. Es ist wieif MyBoolValue = true then
... es ist gültig, aber nicht notwendig. Ich persönlich glaube nicht, dass dieses Beispiel ist nicht eindeutig zu - in der Tat, die Zugabe vonSelf.
tatsächlich macht es schwieriger zu Lesen.OK, ich bin ein bisschen verwirrt hier. Sprichst du von einem form oder eine Rahmen? Formen haben einen OnCreate-handler, aber frames nicht. Wenn Sie wollen etwas passieren, wenn ein Rahmen erstellt, der Konstruktor überschrieben.
Ähnlich, frames haben keine OnDestroy, so stellen Sie sicher, dass das überschreiben der Destruktor, wenn es alles, was Sie brauchen, um aufzuräumen.