プロが教える店舗&オフィスのセキュリティ対策術

テキストボックスに何かを入力し、フォーカスが他のものに移動したときに、LostFocusイベントで入力内容のチェックをかけています。(文字数チェック、ストアドをつかって入力内容と一致するものがDBにあるかなど)

もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい(setfocusを使用)のですが、setfocusをしてもlostfocusされてしまうため、うまくいきません。

VBではValidateイベントというものがあるようですが、
VBAではみあたりません。

どなたかよい方法をご存知でしたら教えてください。

A 回答 (2件)

>もし、入力が誤っている場合には他のものにフォーカスを移さず、そのテキストボックスにフォーカスを残したい



通常、テキストボックスに対しての入力(通常は文字入力後のEnterKeyを押すことや、フォーカスが移るような操作をした場合です。)にたいして
真っ先にBeforupdateイベントが発生します。
このイベントの中で入力が正しいかどうかを判断させ間違っていればこのイベントの引数であるCancelにTrueをセットしてこのイベント(関数)をExitしてください。入力に間違いがなければCancelにはなにもセットしなくてかまいません。

この時Access側でCancel=Trueであればこのテキストボックスに対する操作を破棄してフォーカスをロストする前の状態にとどめます。

Cancel<>Trueであればテキストボックスの変更を確定してAfterupdateイベントに移ります。


ですから、Beforupdateで入力チェックを行い、問題があればCanxel=trueでイベントを中止し、
問題がなければ次の処理をAfterupdateイベントに記述してください。

(Beforupdateイベント内では入力テキストボックス内の値が今変更しようとしている値になっています。しかしながらあくまでテキストボックスの変更が確定するのはBeforupdateイベントが終了してからです。)
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
教えていただいたように試してみたところ、
入力チェックを行うことができました。
動作をとめるにはCancelに値を返すんですね。

本当にありがとうございました。

お礼日時:2005/03/10 18:41

LostFocusイベントではなくて


BeforupdateまたはAfterupdateイベントでは?^^

オブジェクトがフォーカスを失うとき(LostFocus)には編集中であれば

Beforupdate→Afterupdate→LostFocusと言う順番にイベントが行われるので

入力に問題があれば
Beforupdate、Afterupdateイベントでイベントをキャンセル(またはアンドゥ)してやればいい。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
お礼が遅くなり申し訳ございませんでした。

BeforeUpdate、AfterUpdateを使用してみましたが
今一使い方が良くわからずうまくいきませんでした。
BeforeUpdate、AfterUpdateはコントロールとレコードが連結していないと使用できないのでしょうか?
もしご存知でしたら教えてください。

(私の作成しているテキストボックスは連結されておらず、入力された値を取得して、新たにSQL文でUpするようになっています。)

お礼日時:2005/03/10 17:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A