最新トピック
1
20 日前
排他制御 20 日前
2
1 ヶ月前
Hatena様にご質問 1 ヶ月前
6
3 ヶ月前
モジュールでカレントフォームのコントロールを使うには 3 ヶ月前
7
4 ヶ月前
日付のテキストボックスからフォームが開けません 4 ヶ月前
9
4 ヶ月前
レポートにおける数値の間隔を広げる方法 4 ヶ月前
12
4 ヶ月前
リストボックスから複数選択しそれをテーブルに格納したい 4 ヶ月前
タグリスト
Markdown テーブル生成
Accessのテーブルやクエリのデータを貼り付ける場合は下記で、Markdown書式のテーブルに変換して貼り付けてください。
一般論ではなく前回の回答の”フォーカス喪失時”と”フォームの読み込み解除時”についてということで回答します。
その前にメイン/サブフォーム形式のフォームのフォーカス関係のイベントについて。
まずフォームを開いた直後は、メインフォームのタブオーダーが1番目のコントロールにフォーカスがあります。
メインフォームの入力を終えてサブフォームの入力に移るためにサブフォームのコントロールをクリックしたとします。
フォーカス関係イベントは下記のように発生します。
メインフォーム上のサブフォームコントロールのフォーカス取得時(Enter)イベント
↓
サブフォーム上のコントロールのフォーカス取得時(Enter)イベント
↓
サブフォーム上のコントロールのフォーカス取得後(GotFocus)イベント
サブフォームの入力を終了してメインフォームのコマンドボタンやテキストボックスをクリックしてメインフォームへフォーカスを移動したとき
サブフォーム上のコントロールのフォーカス喪失時(Exit)イベント
↓
サブフォーム上のコントロールのフォーカス喪失後(LostFocus)イベント
↓
メインフォーム上のサブフォームコントロールのフォーカス喪失時(Exit)イベント※
↓
クリックしたメインフォーム上のコントロールのフォーカス取得時(Enter)イベント
前回の回答では上記の※の時に、2つの合計をチェックして不一致の場合は、Cancel = Trueでイベントをキャンセルします。イベントがキャンセルされるとそれ以降のイベントは発生せずフォーカスはサブフォームから移動しません。
フォームの読み込み解除時イベントはフォームの右上のクローズボタンをクリックするなどフォームを閉じようとするアクションを起こすと発生します。サブフォームにフォーカスがある場合は、その前にメインフォームへフォーカスが移動することになります。イベントの発生順は下記のようになります。
サブフォーム上のコントロールのフォーカス喪失時(Exit)イベント
↓
サブフォーム上のコントロールのフォーカス喪失後(LostFocus)イベント
↓
メインフォーム上のサブフォームコントロールのフォーカス喪失時(Exit)イベント※
↓
メインフォームの読み込み解除時(Unload)イベント
この場合も※のところで合計チェックをして不一致ならイベントをキャンセルしますが、読み込み解除時イベントは発生してしまいます。ということは合計が不一致のまま閉じてレコード保存されてしまうことになります。
それを防ぐために、読み込み解除時でも合計をチェックして不一致ならイベントをキャンセル(Cancel = True)してフォーカスをサブフォームへ戻しておきます。これで合計が不一致の場合はフォームを閉じることができなくなります。