テキストボックスのValidateイベント内で、次にアクティブに
なるコントロールは、取得できるのでしょうか?
可能です。
以前作成したプログラムが見つからなかったので・・・
その方法を記述していたURLを参考に記載します。
http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips069.htm
ご参考までに・・・
以上。
岡田さん、返答ありがとうございます。
すみません、説明不足でした・・・・
クリックによってフォーカス移動した場合も
どこにフォーカス移動するか知りたいのです。
項目AからBに移動するときは、処理を行わないが、
それ以外の項目に移動する場合は、処理を行わなければ
ならないのです・・・・・
別段、問題ではないと思いますが・・・
移動先でGotFocusした場合に、外部変数のObjectに、そのフォーカスを
受け取ったコントロールをオブジェクト変数として保存し、フォーカスを
失った側から先を知るような・・・もしくは、フォーカスを失った時点で
失ったコントロールを外部変数オブジェクトに保存し、受け取った側で、
どうするのかを判断するとか・・
方法はあると思いますが。
実際にどのような処理を行いたいのか具体的に解りませんので、これ以上
は説明のしようがありません・・・
これらのことによりヒントとして頑張ってもらうしか・・・
以上。
返答ありがとうございます。
クラスでコントロールを監視し、フォーカス取得時に、
ガイダンスメッセージを表示したり、背景色を変えたりしているため、
できれば、GotFocus、LostFocusには、処理を記述したくないという
裏事情があったのです・・・・
項目AとBを一緒にユーザーコントロールにしてしまえば、
できるとは、思うのですが、
スケジュールもタイトで、ロジックを複雑にしたくないという
本音があります。
それで、Validateイベントにて次のActive項目が
とる方法があれば、万事解決!!ということで、掲示板に
記述しました・・・・
Validateイベントにて次のActive項目はとれそうにないので、
なんとか、別方法を探してなんとかがんばってみます。
ヒントありがとうございました。
例えば、Form上にText1,Text2,Text3を置いて実行し、
Text1からtext3へマウスクリックでFocus移動した場合、
Text1_Validate
Text3_MouseDown
Text1_LostFocus
Text3_GotFocus
Text3_MouseUp
Text3_Click
の順でイベントプロシージャを実行します。
(インタプリタ上での実験結果です。コンパイルや、
配置コントロールなどで変化するかもしれません。)
これを見る限りValidate時点で次のFocusはわかりません。
サブクラス化してWM_LBUTTONDOWNを拾ってみると、
Text1_Validate
WM_LBUTTONDOWN(SubClass)
Text3_MouseDown
Text1_LostFocus
Text3_GotFocus
Text3_MouseUp
Text3_Click
の順になりますから、サブクラス化でも無理です。
ところが、ローカルフックでWM_LBUTTONDOWNを拾えば、
WM_LBUTTONDOWN(Local Mouse Hook)
Text1_Validate
Text3_MouseDown
Text1_LostFocus
Text3_GotFocus
Text3_MouseUp
Text3_Click
の順で発生しますから、
ローカルマウスフックのコールバック関数内で、
押されたコントロールを調べてオブジェクト変数に入れておけば、
Validateで次Focusコントロールを拾うことが可能です。
(ただし、これも1つのモデルのテスト結果にすぎません。
これとは違う結果をもたらすケースがないという保証はありません。)
しかし、可能なら仕事上の納品物にフックは使いたくないところです。
SpyWorksのように市販ocxの中にはサブクラス化や一部のフックを
比較的簡単に実現できるものもあるようですから、
調べてみるといいかもしれません。
http://www.grapecity.com/Japan/spyworkspro/
VB.NET版であれば、私が作ったのがありますので、今後の参考にどうぞ
http://www.takonet.co.jp/~pegasus/samples/Move_Enter.lzh
ツイート | ![]() |