0

私のアプリケーションには、ログイン ダイアログ (両方ともモーダル) からアクセスできる管理ダイアログがあります。

ログイン ダイアログで、ユーザーは自分のパスワードを入力し、[OK] をクリックします。OK ボタン ハンドラーで、Self.Close()、次に AdminForm.ShowModal() を呼び出しています。

問題は、AdminForm.ShowModal() への呼び出しが戻るまで、LoginForm が AdminForm の背後で開いたままになることです (AdminForm を移動すると表示されます)。

何か案は?

次のように、3 番目の場所から両方のフォームを表示することで、これを解決できることを知っています。

LoginForm.ShowModal();

if <check some variable from LoginForm to see if user logged in successfully> then begin
  AdminForm.ShowModal()
end;

しかし、LoginForm の [ok] ボタン ハンドラー内から機能するソリューションを特に探しています。

4

1 に答える 1

1

確かに正しい方法は、3 番目の場所から両方のフォームを表示することです。その場所はすでに存在しているので、そこにもう少しコードを追加することは大したことではありません。

「LoginForm の変数」をチェックするための疑似コードは存在する必要はありません。ログインフォームのモーダル結果は、誰かがログインできたかどうかをすでに示しています。

if LoginForm.ShowModal = mrOK then
  AdminForm.ShowModal;

ログイン フォームのタスクは、ログインを処理することです。ログイン フォームは、そのタスクが完了した後に何が起こるかを気にするべきではありません。それは、プログラムを動かし、すべての別々の部分を一緒にリンクすることを仕事とする「サード プレイス」です。

管理が完了するまでログインフォームのShowModalメソッドを返さないようにする必要がある場合は、管理フォーム内からログインフォームを非表示にできます。

procedure TAdminForm.FormShow(Sender: TObject);
begin
  LoginFOrm.Hide;
end;
于 2013-06-06T16:10:32.527 に答える