3

2つのボタンがあるフォームがあります(1つはmrOK-1はmrCancelです)。ボタンの1つをクリックするとすぐに、フォームが閉じます(OnCloseが呼び出されます)。

カスタム値を返したいのですが。このような:

procedure OpenForm;
var
 MyForm : TMyForm;
begin
 MyForm := TMyForm.Create (NIL);
 try 
  if MyForm.ShowModal = 1337 then begin
   // [...]
  end;
 finally
  MyForm.Free
 end;
end;

モーダルフォーム:

 procedure TMyForm.Button1Click(Sender: TObject); // mrOK
 begin
  if Edit1.Text = '' then abort; // Don't close here?!
 end;

 procedure TExecutePrompt.FormClose(Sender: TObject;
 var Action: TCloseAction);
 begin
  if Edit1.Text = '' then abort; // Works but if the user clicks the X it should return mrCancel
 end;

私がやりたいことをご理解いただければ幸いです。これは、編集コントロールを備えたプロンプトウィンドウです。コントロールにテキストがない場合、フォームはテキストが入力されるまで(Xがクリックされない限り)留まる必要があります。

ご協力いただきありがとうございます。

4

1 に答える 1

17

特定のモーダル結果値でモーダルウィンドウを閉じるには、次のように割り当てます。

ModalResult := MyVal; // This will close this modal window
                      // and the modal result will be MyVal

つまり、がを持っていることを確認しButton1ModalResult = mrNoneください。そうすれば、次のようなことができます。

procedure TMyForm.Button1Click(Sender: TObject); // mrOK
begin
  if Edit1.Text <> '' then ModalResult := 1337;
end;

これにより、編集ボックスが空でない場合にフォームが閉じられ、モーダル結果はになります1337

于 2012-08-29T11:33:35.850 に答える