フォームにテキストボックスとボタンがあるとして、テキストボックスのLostFocusイベントに数字6桁以外はエラーのメッセージボックス&SetFocusとしています。ボタンはフォームをアンロード(終了)するのですが、テキストボックスのLostFocusと競合してしまってアンロードできません。どなたかLostFocusよりもキャンセルを優先される方法を教えてください。
編集 削除それは競合ではなく、仕様の問題です。
「6桁入力しない限りほかの処理を受け付けない」仕様に
作ったため、ボタンが押せないだけのことです。
対策としては、
●運用でカバー
「終了したかったら何でもいいから6桁入れる」よう
ユーザに徹底すれば問題は解決します。
●終了ボタンをつけない
右上の「×」ボタンで終了するようにすれば問題は解決します。
●LostFocusで入力チェックしない。
たいていの場合、データ入力のあと、何らかの「処理」が発生します。
その「処理」を実行ボタン押下で行うようにし、
「処理」の最初に入力チェックを一括して行い、
エラーが見つかったら、該当コントロールにSetFocusし、
「処理」を中断します。
●Focusをもたないコントロールで代用する。
たとえばImageコントロールにボタンの絵を描いて、
そのクリックイベントにUnloadを記述します。
「ボタンのへこみ」の処理を自前で用意する必要があります。
(MouseDown/Upで絵をすげかえるとか。)
おすきな方法をどうぞ。
実行時にチェックするようにしました。ありがとうございました。
編集 削除