Когда вы создаете несколько экземпляров класса формы, вам не следует использовать переменную, объявленную IDE в модуле формы.На самом деле, большинство известных мне разработчиков Delphi удаляют эту переменную, как только они создают новую форму, только основная форма приложения сохраняет ее, потому что она нужна dpr.
Кроме того, вам не нужно искать формуиспользуя FindWindow или даже перебирая формы приложения или экрана.Просто используйте локальную переменную при ее создании:
procedure TmainForm.OFBloqueButtonClick(Sender: TObject);
var
NewForm: TOFOperationsForm;
begin
NewForm := nil;
if (mainForm.tabSheetBool = True) AND (mainForm.OFID <> '') then begin
if OF_bloque = False then begin
NewForm := TOFOperationsForm.Create(Application);
NewForm.Caption := 'Bloquer OF';
NewForm.Name := 'OFBloqueForm'; //<== You'll need to make this unique!
OF_bloque := True;
end;
if Assigned(NewForm) then begin
NewForm.BringToFront;
NewForm.ADOOF.SQL.Text := 'SELECT * FROM OFTab WHERE ID=''' + OFID + '''';
NewForm.ADOOF.Open;
end;
end;
end;
Редактировать
Добавлены некоторые меры безопасности в приведенный выше код для предотвращения AV.В его нынешнем виде это означает, что запрос не изменяется, пока не будет создана форма.Если вы хотите установить запрос новой формы или изменить запрос последней созданной формы, вам нужно поле члена в TmainForm:
TmainForm = class(TForm)
private
FLastFormCreated: TOFOperationsForm;
//...
и изменить код в обработчике ButtonClickto:
procedure TmainForm.OFBloqueButtonClick(Sender: TObject);
begin
if (mainForm.tabSheetBool = True) AND (mainForm.OFID <> '') then begin
if OF_bloque = False then begin
FLastFormCreated := TOFOperationsForm.Create(Application);
FLastFormCreated.Caption := 'Bloquer OF';
FLastFormCreated.Name := 'OFBloqueForm';
OF_bloque := True;
end;
if Assigned(FLastFormCreated) then begin
FLastFormCreated.BringToFront;
FLastFormCreated.ADOOF.SQL.Text := 'SELECT * FROM OFTab WHERE ID=''' + OFID + '''';
FLastFormCreated.ADOOF.Open;
end;
end;
end;
Я оставил в проверке Assigned, потому что без остальной части кода я не могу судить, возможно ли логически достичь BringToFront
без FLastFormCreated, получив по крайней мере ссылкуодин раз (т.е. в случае, если OF_Blogue установлен в True в другом месте).