「お昼の放送」の思い出

Tabindex を使ったカーソル制御で困っています。
Tabindexで各コントロールに順位を付け、Enterkeyやマウスで、あるコントロール以降に移動するときは(LostFocus内で)入力チェックをしてひっかかれば自コントロールに戻り、以前のコントロールに移動するときはExitSubでチェックせずに抜けるようにしています。
各コントロールにGotFocusしたときに、共通の変数でTabindex番号を取得して、LostFocus内で比較しているのですが…
通常、移動先コントロールのGotFocusイベントの後に移動元コントロールのLostFocusが起きていて、実際に同じForm内の他のコントロールではうまく動作しています。
しかし、ある部分では全く同じ記述をしているにもかかわらず、LostFocusイベントが先に起こり、うまく動作しません。(しかも、うまく動作しているのと同じプロパティと記述の方法で、コントロールの名前しか違いはありません)。
何か気をつける点はあるでしょうか。
…少し調べたところ、「GotFocusが最初に起こる」というのと「どちらが先に起こるのかは不安定」という記述があってどう考えたら良いのか迷ってしまいます。

A 回答 (5件)

#4さんへ


>CausesValidationプロパティ
知りませんでしたー

VB6...奥が深い...
知っていたら、当時却下されなかったかも?

勉強になりましたm(_ _)m
    • good
    • 0
この回答へのお礼

皆様ありがとうございます。似たようなことを実現するのにも、いろいろな考え方があるものですね。
無事解決いたしました。

お礼日時:2007/02/23 21:00

No.3さんの


>※入力途中で「入力をやっぱやめた」という時
>キャンセルボタンへのフォーカスを持たせられない

というのはキャンセルボタンをクリックした時に入力途中のコントロールでValidateイベントが発生するからということでしょうか?

であれば、キャンセルボタンの「CausesValidationプロパティ」をFalseにしておけば、入力中のコントロールでValidateイベントは発生しません。

こうすれば、Validateイイベントを使っても問題ないのでは?
    • good
    • 0

>ある部分では全く同じ記述をしているにもかかわらず、LostFocusイベントが先に起こり、うまく動作しません。


似たような経験があるのですが、、、もしかしてトグル(ラジオ)ボタンやチェックボックスでしょうか?
それであれば私と一緒です。
どこかのHPにも、「VBのバグ」として紹介されていたのを覚えております。
私も当時、初心者プログラマでしたので、そこのHPに書いてあることを鵜呑みにして深く調査はしておりませんので、もし違っていたらすいません。


私の場合、それをどうしても回避でき無かったので、全てTabStopを殺し、全てKeyCodeがタブキーの時に制御を加えました。


Validateを利用して、フォーカスを移動させない手もあったのですが、、、
※入力途中で「入力をやっぱやめた」という時
キャンセルボタンへのフォーカスを持たせられないという状態のため、却下されました。
キャンセルボタンにフォーカスが行く為には、入力途中の場合、ESCキーを押し、テキストをクリアしなければならないなどの制限が必要になります。

もしそちらのプロジェクト管理者が却下しなければ、それが一番工数がかからない方法だとは思いますが、そうでなければ、コントロール間のフォーカス移動は、全て制御を入れないときついかも知れません。
    • good
    • 0

LostFocusイベントを使わないようにする。



VB6だったら入力チェックはValidateイベントで行います。

このイベントにはCancelという引数があり、Cancel = True とすればフォーカスの移動をキャンセルできます。
    • good
    • 0

こんばんは。



お使いのVBのバージョンは?
それによって会とが違うと思います。

この回答への補足

あ、VB6.0です。申し述べ忘れました。

補足日時:2006/04/27 19:43
    • good
    • 0

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