Tabindex を使ったカーソル制御で困っています。
Tabindexで各コントロールに順位を付け、Enterkeyやマウスで、あるコントロール以降に移動するときは(LostFocus内で)入力チェックをしてひっかかれば自コントロールに戻り、以前のコントロールに移動するときはExitSubでチェックせずに抜けるようにしています。
各コントロールにGotFocusしたときに、共通の変数でTabindex番号を取得して、LostFocus内で比較しているのですが…
通常、移動先コントロールのGotFocusイベントの後に移動元コントロールのLostFocusが起きていて、実際に同じForm内の他のコントロールではうまく動作しています。
しかし、ある部分では全く同じ記述をしているにもかかわらず、LostFocusイベントが先に起こり、うまく動作しません。(しかも、うまく動作しているのと同じプロパティと記述の方法で、コントロールの名前しか違いはありません)。
何か気をつける点はあるでしょうか。
…少し調べたところ、「GotFocusが最初に起こる」というのと「どちらが先に起こるのかは不安定」という記述があってどう考えたら良いのか迷ってしまいます。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.3さんの
>※入力途中で「入力をやっぱやめた」という時
>キャンセルボタンへのフォーカスを持たせられない
というのはキャンセルボタンをクリックした時に入力途中のコントロールでValidateイベントが発生するからということでしょうか?
であれば、キャンセルボタンの「CausesValidationプロパティ」をFalseにしておけば、入力中のコントロールでValidateイベントは発生しません。
こうすれば、Validateイイベントを使っても問題ないのでは?
No.3
- 回答日時:
>ある部分では全く同じ記述をしているにもかかわらず、LostFocusイベントが先に起こり、うまく動作しません。
似たような経験があるのですが、、、もしかしてトグル(ラジオ)ボタンやチェックボックスでしょうか?
それであれば私と一緒です。
どこかのHPにも、「VBのバグ」として紹介されていたのを覚えております。
私も当時、初心者プログラマでしたので、そこのHPに書いてあることを鵜呑みにして深く調査はしておりませんので、もし違っていたらすいません。
私の場合、それをどうしても回避でき無かったので、全てTabStopを殺し、全てKeyCodeがタブキーの時に制御を加えました。
Validateを利用して、フォーカスを移動させない手もあったのですが、、、
※入力途中で「入力をやっぱやめた」という時
キャンセルボタンへのフォーカスを持たせられないという状態のため、却下されました。
キャンセルボタンにフォーカスが行く為には、入力途中の場合、ESCキーを押し、テキストをクリアしなければならないなどの制限が必要になります。
もしそちらのプロジェクト管理者が却下しなければ、それが一番工数がかからない方法だとは思いますが、そうでなければ、コントロール間のフォーカス移動は、全て制御を入れないときついかも知れません。
No.2
- 回答日時:
LostFocusイベントを使わないようにする。
VB6だったら入力チェックはValidateイベントで行います。
このイベントにはCancelという引数があり、Cancel = True とすればフォーカスの移動をキャンセルできます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual Basic 6.0 コンボボック...
-
【VB】タブ切り替え時のイベント
-
タブキー押下時のイベントをひ...
-
キーイベントを擬似的に発生さ...
-
cellをenterで横移動
-
特定のキーを押すまでループさ...
-
(VBA)チェックボックスのclick...
-
C# WMPメディアの終了検知 その2
-
KEYPREVIEW=TRUEについて。意味...
-
一定時間操作されないと自動で...
-
フォーカスについてお教えください
-
コンボボックスにキー入力をさ...
-
IEで、BackSpaceで「戻る」機能...
-
TextboxまたはMaskEditboxでの...
-
テキストボックスの入力文字を1...
-
delphi imageコンポでOnKeyイベ...
-
VB IEブラウザへのキーイベント...
-
Excel VBA マクロ実行中のみテンキ...
-
「ご処理進めて頂きますようお...
-
Excelシート上のマクロを登録し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB】タブ切り替え時のイベント
-
特定のキーを押すまでループさ...
-
Visual Basic 6.0 コンボボック...
-
一定時間操作されないと自動で...
-
WPFでの時刻入力コントロールに...
-
(VBA)チェックボックスのclick...
-
タブキー押下時のイベントをひ...
-
コンボボックスにキー入力をさ...
-
VB.NETのDropDownListをReadOnl...
-
フォーカスについてお教えください
-
VB.NETでフォームがない...
-
KEYPREVIEW=TRUEについて。意味...
-
Excel VBA マクロ実行中のみテンキ...
-
Access データ表示 完了時のイ...
-
IEで、BackSpaceで「戻る」機能...
-
キーイベントを擬似的に発生さ...
-
複数のテキストボックスのカン...
-
エクセルVBAのテキストボック、...
-
C# WMPメディアの終了検知 その2
-
ユーザーフォームのテキストボ...
おすすめ情報