次フォーカスコントロール取得方法について


tmiyu  2003-08-02 03:35:31  No: 107950

テキストボックスのValidateイベント内で、次にアクティブに
なるコントロールは、取得できるのでしょうか?


岡田 之仁  2003-08-02 18:57:03  No: 107951

可能です。

以前作成したプログラムが見つからなかったので・・・
その方法を記述していたURLを参考に記載します。

http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips069.htm

ご参考までに・・・

以上。


tmiyu  2003-08-03 01:21:37  No: 107952

岡田さん、返答ありがとうございます。

すみません、説明不足でした・・・・
クリックによってフォーカス移動した場合も
どこにフォーカス移動するか知りたいのです。

項目AからBに移動するときは、処理を行わないが、
それ以外の項目に移動する場合は、処理を行わなければ
ならないのです・・・・・


岡田 之仁  2003-08-03 07:43:27  No: 107953

別段、問題ではないと思いますが・・・

移動先でGotFocusした場合に、外部変数のObjectに、そのフォーカスを
受け取ったコントロールをオブジェクト変数として保存し、フォーカスを
失った側から先を知るような・・・もしくは、フォーカスを失った時点で
失ったコントロールを外部変数オブジェクトに保存し、受け取った側で、
どうするのかを判断するとか・・

方法はあると思いますが。

実際にどのような処理を行いたいのか具体的に解りませんので、これ以上
は説明のしようがありません・・・

これらのことによりヒントとして頑張ってもらうしか・・・

以上。


tmiyu  2003-08-03 08:39:17  No: 107954

返答ありがとうございます。

クラスでコントロールを監視し、フォーカス取得時に、
ガイダンスメッセージを表示したり、背景色を変えたりしているため、
できれば、GotFocus、LostFocusには、処理を記述したくないという
裏事情があったのです・・・・

項目AとBを一緒にユーザーコントロールにしてしまえば、
できるとは、思うのですが、
スケジュールもタイトで、ロジックを複雑にしたくないという
本音があります。

それで、Validateイベントにて次のActive項目が
とる方法があれば、万事解決!!ということで、掲示板に
記述しました・・・・

Validateイベントにて次のActive項目はとれそうにないので、
なんとか、別方法を探してなんとかがんばってみます。

ヒントありがとうございました。


Say  2003-08-03 09:25:06  No: 107955

例えば、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/


クリリン  2003-08-05 00:44:51  No: 107956

VB.NET版であれば、私が作ったのがありますので、今後の参考にどうぞ
http://www.takonet.co.jp/~pegasus/samples/Move_Enter.lzh


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加