Я хочу позволить пользователю создавать несколько экземпляров одной и той же формы (назовем ее Form1, которая является дочерней формой MDI). Итак, у меня есть две подобные процедуры, в которых я создаю формы.
procedure MyProcedure1; // procedure 2 is similar. it also has a var called MyFrm
var MyFrm: TFrm1;
begin
...
MyFrm:= TFrm1.create(MainForm);
MyFrm.BringToFront;
MyFrm.LoadFromFile(someFile);
end;
Как видите, MyFrm - это локальная переменная. Это нормально для меня, поскольку мне не нужно программно обращаться к форме после ее создания. Другой глобальной переменной с именем Frm1 не существует. В событии OnClose MyFrm у меня есть Action: = caFree;
Что могло вызвать указанную выше ошибку? s назовите его Form1, который является дочерней формой MDI). Итак, у меня есть две подобные процедуры, в которых я создаю формы. процедура ...
Я хочу позволить пользователю создавать несколько экземпляров одной и той же формы (назовем ее Form1, которая является дочерней формой MDI). Итак, у меня есть две подобные процедуры, в которых я создаю формы.
procedure MyProcedure1; // procedure 2 is similar. it also has a var called MyFrm
var MyFrm: TFrm1;
begin
...
MyFrm:= TFrm1.create(MainForm);
MyFrm.BringToFront;
MyFrm.LoadFromFile(someFile);
end;
Как видите, MyFrm - это локальная переменная. Для меня это нормально, поскольку мне не нужно программно получать доступ к форме после ее создания. Другой глобальной переменной с именем Frm1 не существует. В событии OnClose MyFrm у меня есть Action: = caFree;
Что могло вызвать указанную выше ошибку? s назовите его Form1, который является дочерней формой MDI). Итак, у меня есть две подобные процедуры, в которых я создаю формы. процедура ...
Я хочу позволить пользователю создавать несколько экземпляров одной и той же формы (назовем ее Form1, которая является дочерней формой MDI). Итак, у меня есть две подобные процедуры, в которых я создаю формы.
procedure MyProcedure1; // procedure 2 is similar. it also has a var called MyFrm
var MyFrm: TFrm1;
begin
...
MyFrm:= TFrm1.create(MainForm);
MyFrm.BringToFront;
MyFrm.LoadFromFile(someFile);
end;
Как видите, MyFrm - это локальная переменная. Это нормально для меня, поскольку мне не нужно программно обращаться к форме после ее создания. Другой глобальной переменной с именем Frm1 не существует. В событии OnClose MyFrm у меня есть Action: = caFree;
Что могло вызвать указанную выше ошибку?
procedure MyProcedure1; // procedure 2 is similar. it also has a var called MyFrm
var MyFrm: TFrm1;
begin
...
MyFrm:= TFrm1.create(MainForm);
MyFrm.BringToFront;
MyFrm.LoadFromFile(someFile);
end;
Как видите, MyFrm - это локальная переменная. Для меня это нормально, поскольку мне не нужно программно получать доступ к форме после ее создания. Другой глобальной переменной с именем Frm1 не существует. В событии OnClose MyFrm у меня есть Action: = caFree;
Что могло вызвать указанную выше ошибку?
procedure MyProcedure1; // procedure 2 is similar. it also has a var called MyFrm
var MyFrm: TFrm1;
begin
...
MyFrm:= TFrm1.create(MainForm);
MyFrm.BringToFront;
MyFrm.LoadFromFile(someFile);
end;
Как видите, MyFrm - это локальная переменная. Для меня это нормально, поскольку мне не нужно программно получать доступ к форме после ее создания. Другой глобальной переменной с именем Frm1 не существует. В событии OnClose MyFrm у меня есть Action: = caFree;
Что могло вызвать указанную выше ошибку? Пользователь отправил эту ошибку. Это случилось всего один раз, и я не могу воспроизвести это.
Изменить:
Ошибка появляется в строке «MyFrm: = TFrm1.create».
Некоторые люди предположили, что мне нужно программно присвоить уникальные имена моим динамически создаваемым формам. Я также задавался вопросом, какое имя принимает форма при ее создании, поэтому я вошел в код при вызове процедуры MyProcedure1.
Delphi автоматически дает уникальные имена, например
MyFrm.name = MyFrm, затем
MyFrm.name = MyFrm_1,
MyFrm.name = MyFrm_2,
MyFrm.name = MyFrm_3 и т. Д.
MyFrm.Name не изменяется в LoadFromFile. Я проверил (точку останова) значение MyFrm.Name в конце процедуры MyProcedure1; после LoadFromFile. Имя уникальное.
Как предлагали некоторые, я переопределил процедуру SetName и проверил имя TMyFrm. Действительно, каждая форма получает уникальное имя.
procedure TMyFrm.SetName (const Value: TComponentName);
начало
ShowMessage (Значение);
унаследованный;
конец;
У меня много форм в этом приложении, но автоматически создается только MainForm.
Я не использую потоки. В любом случае это не будет иметь значения, поскольку формы создаются пользователем (поэтому многопоточность не имеет значения, если пользователь не может создавать 2 формы одновременно).