WindowsXP、VC++2005のMFCにて図のようなプログラムを作成しています。
※※※添付図はListCtrlですが、FlexGridとして認識お願いします。※※※
SetFocusが原因と考えられる問題が生じてしまい、
期待動作をさせることが出来ない状況です。
なお、FlexGridでなくListCtrlで同じプログラムを作成し、
同手順で操作したところ、期待動作をさせることが出来ました。
よって、FlexGridのみ起こる問題と考えられます。
原因と解決策についてご存知の方おられましたら、
ご教示お願い致します。
下記に期待動作、問題動作、また問題が再現しない特別な場合の
手順について記載します。
【期待動作】
タブオーダー設定順(リスト→ボタン1→ボタン2→ボタン3)
に遷移させたい
【問題動作】
ボタン2にフォーカスがある状態でタブキーを押すと、
ボタン3でなくボタン1にフォーカスが移る
【問題が再現する場合の手順】
(1)ボタン2を押して、(※処理1)を実行する。
その際に、リストにフォーカスが当った後に、
フォーカスがボタン2に移る。
(2)タブキーを押す。
(3)ボタン3にフォーカスが移るはずが、ボタン1に移ってしまう。
【問題が再現しない場合の手順】
(1)ボタン1もしくはボタン3をクリックしフォーカスを当てる。
※この際ボタン2をクリックすると、問題が再現してしまう。
※ボタン1及びボタン3を押した際の処理はないものとする。
(2)アクセラレータキー(&A)によってボタン2をクリックし、
(※処理1)を実行。
(3)タブキーを押す。
(4)タブオーダーの通り、ボタン3へとフォーカスが移る。
(※処理1)の内容
void CtestListDlg::OnBnClickedButton2()
{
m_List.SetFocus();//グリッドにフォーカスをセット
m_btn2.SetFocus();//ボタン2にフォーカスをセット
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
もし、FlexGridで「フォーカスを受け取った際、メッセージキューに何かメッセージを入れている」場合、そのメッセージが処理されるのは「btn2のクリックイベント関数を抜けた後」です。
そして、もし、その「何かのメッセージ」が「FlexGridにフォーカスを移す実処理に関わるメッセージ」だった場合、以下のような事が起きるでしょう。
・btn2のクリックイベント内でFlexGridがSetFocusされる
・それに関わるメッセージがポストされる(まだ処理されない)
・btn2のクリックイベント内でbtn2がSetFocusされる
・btn2のクリックイベントを抜け、メッセージループに戻る
・FlexGridのSetFocusに関わるメッセージが処理され、そのメッセージにより内部的なタブストップ位置がFlexGridになる
・(見た目だけは)btn2にフォーカスがある(ように見える)
・Tabを押すと、内部的なタブストップ位置がFlexGridにあったので、FlexGridの次のタブストップであるbtn1にフォーカスが移る
以下の※の位置に、プロセスのメッセージを処理するProcessMessage()を入れ、メッセージキューに溜まったメッセージを処理してから、btn2にフォーカスをセットしてみましょう。
m_List.SetFocus(); //グリッドにフォーカスをセット
※
m_btn2.SetFocus(); //ボタン2にフォーカスをセット
なお、原因が別の所にある(例えば、FlexGridのフォーカス消失時のイベント処理に、btn1にフォーカスをセットするような処理が書いてある、など)場合は、上記の追加では直りません。
ご回答ありがとうございます。
ご指摘の通り、ProcessMessage()を用いて試みましたが、
コンパイルエラーが発生して、使用することが出来ませんでした。
※私の使い方が悪かったのかもしれませんが。。
ただ、理論は理解できたので、代わりに
m_List.EnableWindow(false);
にて無理やりフォーカスをはずしてやることで、
解決することが出来ました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- Visual Basic(VBA) 【ExcelVBA】動的にボタン、ボタン名を生成できますか? 7 2022/04/08 12:54
- 扇風機・冷風機・サーキュレーター スマートプラグで最近の扇風機は操作できない? 5 2022/11/04 13:37
- Java Javaプログラミングの質問になります。 ボタンを押下した時に画面遷移して 画面から戻ってきた時のi 1 2023/06/26 07:50
- Visual Basic(VBA) VBAで早押しゲームを作りたい 4 2022/05/12 13:46
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) マクロで謎の現象が起きていて困ってます。 エクセルで作ったボタンを押すとマクロが動いて処理をしてくれ 3 2023/06/22 17:28
- デスクトップパソコン 自作PCの電源が入らなくなりました、なんでもいいので助言ください。 5 2022/12/21 21:08
- ブルーレイ・プレーヤー・レコーダー ノートパソコンのCD/DVDドライブ 4 2023/02/20 15:01
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームのSetFocusが...
-
どこにもフォーカスを当てたくない
-
卒業アルバムの集合写真!アイ...
-
VC++2010のラジオボタンの選択...
-
他の人には声だして挨拶してる...
-
油性マジックで書いたサインを...
-
85年に開催された神戸グリー...
-
C# ReadOnlyのTextBoxで
-
テキストボックス入力後、警告...
-
エクセルVBA テキストボックス...
-
Accessの更新後処理で特定の条...
-
VBAでのユーザーフォーム上...
-
矢印(左右)キーでイベントを...
-
池袋サンシャイン通りでキャッ...
-
タブコントロールのフォーカス...
-
『エッジの効いた○○』の意味。
-
酸素ボンベのレギュレーターか...
-
VB.NETでボタンクリックイベン...
-
HDD異音のサンプルが聴けるページ
-
油性マジックの消し方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どこにもフォーカスを当てたくない
-
エクセルVBA テキストボックス...
-
他の人には声だして挨拶してる...
-
ユーザーフォームのSetFocusが...
-
炊飯器のセットの音と出来上が...
-
C# ReadOnlyのTextBoxで
-
業務に差し支えのないテンキー...
-
GridViewでハイライトを使用し...
-
コマンドボタンのEnterイベント...
-
矢印(左右)キーでイベントを...
-
油性マジックの消し方
-
OPPO A54 5Gを使っています。 ...
-
Accessの更新後処理で特定の条...
-
VBAでのユーザーフォーム上...
-
池袋サンシャイン通りでキャッ...
-
VBAのExitイベントについて
-
MFCでコンボボックスを選択不可...
-
中古本の店名ハンコの消し方
-
マイクラのマルチサーバーが起...
-
スプレットシートでフォーカス...
おすすめ情報