[Delphi] フォームを閉じる時に入力チェックをしてエラーなら閉じない




トップページへ

※全てのDelphiで動作する保証はありません。また、内容に関し管理人は全ての責任を負いかねます

 

サンプルの概要

フォームを閉じる時(アプリを終了する時)入力チェックをして、エラーならフォームを閉じないというものです。

それだけでは記事として物足りないので、TryStrToInt を使用し「整数以外はエラー」「負の数はエラー」という処理もあわせて実施しています。

なお、フォームにはTEditの「EDT_PR」を設置しています。

 

ポイント

・FormCloseQueryイベント(公式)を使用し、エラーなら CanClose に False をセットしてフォームを閉じる処理をキャンセルしています。

・TryStrToInt関数(公式)で、入力した文字が整数なのかどうかをチェックし、例えば小数ならエラーとする。さらに、0未満の値でもエラーとし、いずれもの場合もエラーならフォームを閉じない。

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
    w_answer: Integer;

begin

    if TryStrToInt(EDT_PR.Text, w_answer) = false then begin
        MessageDlg('整数を入力して下さい', mtWarning, [mbOK], 0);
        EDT_PR.SetFocus;
        CanClose := False;
        Exit;

    end
    else begin

        if (w_answer < 0) then begin
            MessageDlg('0以上を入力して下さい', mtWarning, [mbOK], 0);
            EDT_PR.SetFocus;
            CanClose := False;
            Exit;

        end;

    end;

フォームを閉じる時の処理

end;

 

補足

「フォームを閉じる時の処理」は何もすることがなければ記述する必要はありませんが、レジストリなどに値を残したい場合は、そこで処理すれば良いかと思います。

そのためにサンプルの if文には「Exit;」を記述していますし、私の場合、「閉じる時の処理」の有無に関係なく常にExit;を記述しています。

【PR】 Delphi (amazon) *見つからない場合があります

【PR】 Delphi (楽天市場) *見つからない場合があります




ほかの Delphi の記事

[Delphi] TStringGrid

[Delphi] 時間のかかる処理は砂時計・ListBoxの高速化

[Delphi] 個人的 逆引き関数リファレンス

[Delphi]小ネタ備忘録

[Delphi]MySQLへの接続で失敗(未解決)