プロが教える店舗&オフィスのセキュリティ対策術

Windows XP、Access2000での開発で、サブフォーム上のテキストボックスを右リックすると
(普通のクリックではなく、あえて右クリック)、
別のフォームが表示される処理を作ろうとしています。
VBAのコードを
Private Sub テキストボックス名_mousedown(Button As Integer, Shift As Integer, X As Single, Y As Single)
 If Button = acRightButton Then
 DoCmd.OpenForm "フォーム名"
 End If
End Sub
としているのですが、これだとマウスを離してしまうと、画面が閉じてしまいます。
普通のクリックでのイベントと同じように、右クリックで別のフォームを表示するにはどうしたらよいでしょうか?
初心者です。
どなたか分かる方教えてください!!

A 回答 (1件)

テキストボックスのコンテキストメニュー(右クリックをしたときに表示されるメニュー)の表示を抑止してやれば、フォーカスがテキストボックスに戻ることを防げるため、希望通りの動作が実現できます。



'子フォーム本体のフォームモジュール
Private Sub テキストボックス名_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = acRightButton Then
    Me.ShortcutMenu = False '←追加部分
    DoCmd.OpenForm "フォーム名"
  End If
End Sub

ただし、このままではサブフォームのコンテキストメニューが全く表示されなくなってしまうので、親フォームがアクティブになったときにプロパティを戻してやる必要があります。

'親フォームのフォームモジュール
Private Sub 親フォーム_Activate()
  Me.子フォーム.Form.ShortcutMenu = True
End Sub

もしかしたら違うかもしれませんが、独自のコンテキストメニューを表示したいのではないですか?もしそうだとしたら専用の方法があるので、そちらを使用したほうが良いと思います。
    • good
    • 0
この回答へのお礼

mach999さん、ありがとうございます。
マウスダウンのイベント時にフォーカスが
テキストボックスに戻ることを防げるようにすればよかったんですね。
サブフォームに表示された一覧の情報を右クリックすることにより、
それの修正を行うための画面を表示させたかったので、
コンテキストメニュー自体が出ないように設定していました。
教えていただいた方法で出来ました。
ありがとうございます。

お礼日時:2004/09/16 12:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!