右クリックメニューを表示した後のSetFocusについて

[戻る]
ぽんぽん 2009/11/20(金) 12:00:02
開発環境】
OS  :WindowsXP(SP3)
言語:VB6.0(SP6)

右クリックメニューを表示した後のSetFocusについて質問です。

フォームAに貼り付けたMSチャートコントロールのグラフ(オブジェクト名:chAAA)を右
クリックしてポップアップメニューを表示し、
別フォームBをLoadしてchAAAグラフを拡大したグラフ(オブジェクト名:chBBB)に表示す
るプログラムを作成しています。

問題点は、フォームBを終了した後フォームAがアクティブになる際に、
フォームA内のコマンドボタンを1度押下しても反応しないというものです。
2度目の押下で反応します。

手順としては以下です。

(1)フォームAのchAAAのMouseDownイベント内で右クリックであれば拡大するメニューを表
示
(2)メニューを選択し、フォームBをvbModalでShow
(3)フォームBを表示後、ボタン操作でUnload
(4)フォームAのコマンドボタンを押下しても反応せず

chAAAのMouseDownイベント内では、PopupMenuメソッド終了後に
フォームAのコマンドボタンに対してSetFocusしています。


以下にソースを表記します。

'右クリック時に拡大メニューを表示
Private Sub chAAA_MouseDown(Button As Integer, 
              Shift As Integer, 
              X As Single, 
              Y As Single)
    
    On Error Resume Next
    If Button = vbRightButton Then
     '拡大メニューのポップアップ
       frmA.PopupMenu mnuKakudai, vbPopupMenuRightButton

   'コマンドボタンにフォーカスを移す
      cmdExit.SetFocus ←※SetFocus自体は成功。
                    ※この処理後にActiveControl.Captionを
                         ※Debug.Printでチェックしたところ,
                    ※cmdExitのキャプションが返るが、
                    ※実際はフォーカスが移動されないと思われる。

    End If
    
End Sub

'右クリックメニュー選択時
Private Sub mnuKakudai_Click()
    
    frmB.Show vbModal

End Sub

SetFocusするタイミングが悪いのではと考えていますが、
対策方法が分からないです。

ご教授よろしくお願いします。

ぽんぽん 2009/11/24(火) 11:10:56
自己レスです。
(質問内容が分かりにくいせいか、レスがありませんが・・・)
上記質問に補足します。

TextBoxのMouseDownイベントで右クリックメニュー表示した後は、
SetFocusでフォーカスが正常に移動できております。
MSChartオブジェクトのMouseDownイベントで右クリックメニュー表示した後だと
フォーカスが正常に移動しないようです。。。

回避方法があればご教授お願い致します。

紅' 2009/11/24(火) 17:33:15
こんにちわ。
VB6.0 も使える環境には入ってないので確認も出来ず。
たぶん期待には応えられないと思うのですが。

むかし確かにタイミングによってはそういう症状に悩んだ記憶があります。
で、対処療法になるのですが、1ms 間隔のタイマーイベントを
フォーカスをセットしている箇所で発行して、タイマーイベントで
フォーカスを設定とかやっていたような気がします。
そういう方法は許容されますか?

ぽんぽん 2009/11/25(水) 10:06:44
[[解決]]
紅'さん、ご回答ありがとうございました。
なるほど、タイマーイベントを利用する手段は気づきませんでした。

今回、中々回答が得られなかったため、
別の掲示板1件にも本件を投稿させて頂いたところ、
chAAA_MouseDownイベントではなく、chAAA_MouseUpイベントを使うという案を頂き、
試したところ上手く動作するようになりました。

ありがとうございました。

古いスレッドには追加発言できません。