2023/04/07

ダイアログボックスの入力チェック

前回は、ダイアログボックスの開き方について記述しました。

今回は、開いたダイアログ側のプログラムについて記載します。ダイアログボックスでは、通常のフォームとは違うコーディングが必要となります。

ダイアログボックスの設計はフォームでできています。フォームを開くときには、通常のフォームと同様に QueryOpen、PostOpen イベントが発生します。

閉じるときも同様に QueryClose イベントが発生します。ただ、通常のフォームと違うのは、フォームの閉じ方です。ダイアログボックスは、単に閉じるだけではなく、[OK]か[キャンセル]のボタンのどちらかで閉じることになります。入力チェックは、[OK]の時だけ実行する必要があります。必須項目を入力しないと、キャンセルできないのは不便ですからね...

その判定を行うのが、NotesUIDocument クラスの DialogBoxCanceled プロパティです。

以下のコードは、私がダイアログボックスに記述する一般的なプログラムです。最初に DialogBoxCanceled プロパティが True の場合、イベントを抜けています。これで、キャンセルした場合は、入力チェックせずに閉じることになります。

その後、入力チェックする関数 IsError() をコールして、エラーがあった場合は、ダイアログボックスが閉じるのをキャンセルするため Continue を False にセットしています。 これで、正しく入力するまで[OK]で閉じれないようにしています。

Sub QueryClose(Source As NotesUIDocument, Continue As Variant)
   If Source.DialogBoxCanceled Then Exit Sub
   If IsError(Source) Then
      Continue = False
      Exit Sub
   End If
End Sub

なお、入力チェックする関数は以下の通りとなります。ここで、入力の有無や関連するフィールドの整合性を確認します。

エラーがなかった(=最後まで関数が実行された)場合、戻り値を False にセットし、エラーがなかったことを呼び出し元に返しています。

%REM
   エラーの場合、メッセージを表示して True を返す
%END REM
Function IsError(vnuid As NotesUIDocument) As Integer
   Dim nd As NotesDocument

   Set nd = vnuid.Document

   IsError = True

   '以下に入力チェックを記述(エラー時は関数を抜ける)
   If CStr(nd.XXXX(0)) = "" Then
      MessageBox "XXXXを入力して下さい。", 16, "入力エラー"
      Exit Function
   End If

   '次の入力チェックを以下に記述

   IsError = False '最後まで実行したらエラーなし

End Function

0 件のコメント:

コメントを投稿