子供が複数回作成するのを防ぐ方法 (例: ログインフォーム)。ログインフォームが開かれる前に子をループせずに解決策があり、別のインスタンスが作成されているかどうかを確認してください。
1226 次
1 に答える
1
デフォルトでは、各フォームにはグローバル ポインターが宣言されています。フォームを自動作成しない場合でも、そのポインターを利用できます。特定のフォームについて、起動時にそのグローバル ポインターを初期化し、そのフォームの新しいインスタンスを作成する前nil
にポインターをチェックしnil
、フォームが閉じられnil
たときにフォームを破棄し、フォームが破棄されたときにそのグローバル ポインターをリセットします。例えば:
unit LoginForm;
interface
...
type
TLoginForm = class(TForm)
...
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
...
end;
var
LoginForm: TLoginForm = nil; // <-- here
implementation
...
procedure TLoginForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TLoginForm.FormDestroy(Sender: TObject);
begin
LoginForm := nil;
end;
...
end.
procedure TMainForm.SomeProcedure;
begin
...
if not Assigned(LoginForm) then
LoginForm := TLoginForm.Create(Self);
LoginForm.Show;
...
end;
于 2013-10-24T19:23:21.673 に答える