MSChartオブジェクトから他のオブジェクトへフォーカスが移動されないのは?

解決


ぽんぽん  2009-11-24 14:20:47  No: 142882  IP: [192.*.*.*]

【開発環境】
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ラウンジ」で回答が得られていないため、
※一部記載を変更して、本掲示板に投稿させて頂きました。
※マルチポストに該当してしまうかと思いますが、ご容赦の程お願いします。

編集 削除
オショウ  2009-11-24 19:52:48  No: 142883  IP: [192.*.*.*]

chA_MouseDown  ではなく、chA_MouseUp で行えば
ちゃんと動作します。

要は、マウスダウンイベントの次のマウスアップ
メッセージが未処理?になる為だと思いますが。

※  それじゃ〜ダメですか?

以上。

編集 削除
ぽんぽん  2009-11-25 10:16:23  No: 142884  IP: [192.*.*.*]

オショウさん、ご回答ありがとうございました!
MouseUpイベントで動作するようになりました。

>要は、マウスダウンイベントの次のマウスアップ
>メッセージが未処理?になる為だと思いますが。

どうやらその通りのようですね。
イベント発生順序を踏まえないといけないですね。

助かりました。本当にありがとうございます。

編集 削除