【開発環境】
OS :WindowsXP(SP3)
言語:VB6.0(SP6)
フォームAに貼り付けたMSチャートコントロールのグラフ(chA)を
右クリックしてポップアップメニューを表示し、
別フォームBをLoadしてchAグラフを拡大したグラフを表示するプログラムを作成しています。
問題点は、フォームBを終了した後フォームAがアクティブになった直後、
フォームA内のコマンドボタン(cmdX)を1度押下しても反応しないというものです。
コマンドボタンに限らず、テキストボックスをクリックしても反応しないのです。
2度目の押下では反応します。
手順としては以下です。
(1)フォームAのchAのMouseDownイベント内で右クリックであれば拡大するメニューを表示
(2)メニューを選択し、フォームBをvbModalでShow
(3)フォームBを表示後、ボタン操作でUnload
(4)フォームAのコマンドボタンを押下しても反応せず
chAのMouseDownイベント内では、PopupMenuメソッド終了後に
フォームAのコマンドボタンに対してSetFocusしています。
ソースを表記します。
----------------------------------------------------------------------
'右クリック時に拡大メニューを表示
Private Sub chA_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = vbRightButton Then
'拡大メニューのポップアップ
frmA.PopupMenu mnuKakudai, vbPopupMenuRightButton
End If
End Sub
Private Sub chA_GotFocus()
'コマンドボタンにフォーカスを移す
cmdX.SetFocus
End Sub
'右クリックメニュー選択時
Private Sub mnuKakudai_Click()
frmB.Show vbModal
End Sub
----------------------------------------------------------------------
MouseDownイベントを、MSChartではなく、テキストボックスにした場合ですと、
正常にSetFocusができております。
もしかしたら、MSChartの不具合でしょうか?
お心あたりの方、回避方法などご教授よろしくお願いします。
※ちなみに、本質問は「VBラウンジ」という掲示板にも投稿しております。
※「VBラウンジ」で回答が得られていないため、
※一部記載を変更して、本掲示板に投稿させて頂きました。
※マルチポストに該当してしまうかと思いますが、ご容赦の程お願いします。
chA_MouseDown ではなく、chA_MouseUp で行えば
ちゃんと動作します。
要は、マウスダウンイベントの次のマウスアップ
メッセージが未処理?になる為だと思いますが。
※ それじゃ〜ダメですか?
以上。
オショウさん、ご回答ありがとうございました!
MouseUpイベントで動作するようになりました。
>要は、マウスダウンイベントの次のマウスアップ
>メッセージが未処理?になる為だと思いますが。
どうやらその通りのようですね。
イベント発生順序を踏まえないといけないですね。
助かりました。本当にありがとうございます。