右クリックイベントを使った別のフォーム表示方法

このQ&Aのポイント
  • Windows XP、Access2000での開発で、サブフォーム上のテキストボックスを右リックすると別のフォームが表示される処理を作りたいです。
  • VBAのコードを使用してマウスの右クリックイベントを検知し、別のフォームを表示する方法を知りたいです。
  • マウスの右クリックイベントを普通のクリックイベントと同じように処理する方法について教えてください。
回答を見る
  • ベストアンサー

右クリックイベント

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 としているのですが、これだとマウスを離してしまうと、画面が閉じてしまいます。 普通のクリックでのイベントと同じように、右クリックで別のフォームを表示するにはどうしたらよいでしょうか? 初心者です。 どなたか分かる方教えてください!!

質問者が選んだベストアンサー

  • ベストアンサー
  • mach999
  • ベストアンサー率75% (36/48)
回答No.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 もしかしたら違うかもしれませんが、独自のコンテキストメニューを表示したいのではないですか?もしそうだとしたら専用の方法があるので、そちらを使用したほうが良いと思います。

saru38
質問者

お礼

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

関連するQ&A

  • テキストボックス上でのショートカットメニューを無効にしたい

    テキストボックス上で、右クリックをすると、クリップ ボードにある文字列をテキストボックスにペーストする ということをしたいのですが、右クリックを押すと ショートカットメニューが開いてしまいます。 (下記コード参照)ショートカットメニューを無効に する方法はあるでしょうか? Private Sub Text1_MouseDown(Index As _ Integer,Button As Integer,Shift As _ Integer, X As Single, Y As Single) With Text1 If Button = vbRightButton Then If Clipboard.GetText <> "" Then .SelText = Clipboard.GetText End If End If End With End Sub VB6を使用してます。

  • mouse dowunイベントについて

    VB6.0 MouseDowunイベントについて質問です。 ピクチャーボックスをクリックした場合 ピクチャーボックス領域の上半分をクリックしたら フォーム表示位置を上移動、下半分だったら下移動という処理を行っています。 しかし、現状ではチェックボックスなどのその他コントロールを操作している際に すこしでもクリック位置がずれると表示位置が移動してしまう誤作動が起こってしまいます。 これを防止するためにクリックではなくダブルクリックで対応したいのですが マウスダウンイベントでダブルクリックを対応させることは可能ですか? Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Form1.ScaleHeight / 2 - y < 0 Then Picture2.Top = Form1.ScaleHeight / 2 - y If Picture2.Top < -VScroll1.Max Then Picture2.Top = -VScroll1.Max End If Else Picture2.Top = 0 End If End Sub

  • Access VBAによるフォームの色変更。

    個人での捜索に行き詰ってしまいましたので、ご相談させていただきます。 ○使用環境 WindowsXP Access2007 VBAで色変更する、Accessのフォームについて質問させていただきます。 下記の記述で「フォーム名」というフォームをボタンで開こうとしています。 Private Sub コマンド2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)   DoCmd.OpenForm Form_フォーム名.Name   Form_フォーム名.Section(0).BackColor = "12349952" End Sub Private Sub コマンド3_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)   DoCmd.OpenForm Form_フォーム名.Name   Form_フォーム名.Section(0).BackColor = "1643706" End Sub その際、ボタンによって背景色を変更して表示しようとしています。 デザインビューで「フォーム名」のプロパティを変更した直後はボタンの操作で背景色が変わりますが、 一度、「フォーム名」をクローズして、再度ボタンの操作でオープン するときには反映されなくなっています。 もしかしたら、自身の方で何か見落としがあるかもしれませんが、同様の事象をご存知の方がおられましたら、ご指南いただきたいです。 宜しくお願い致します。

  • マウスが触れるとテキストを表示し離れる非表示にする

    アクセスです。 フォームにラベルを設置して、 そのラベルにマウスが触れたらテキストボックスを表示させたいのです。 フォームのオープンイベントは Private Sub Form_Open(Cancel As Integer) Me.テキスト2.Visible = False End Sub になっています。 ラベルのマウスボタン解放時イベントで Private Sub ラベル0_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.テキスト2.Visible = True End Sub にして、ラベルをクリックするとテキストボックスが表示されます。 マウスボタン移動時イベントで Private Sub ラベル0_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Me.テキスト2.Visible = True End Sub にすると、理想通りラベルからマウスが触れたらテキストボックスが表示されます。 ここまではいいのですが マウスのカーソルが離れたら またテキストボックスを非表示にしたいのですがどうすればいいですか?

  • エクセル2010のvbaについて

    押されたコマンドボタンの名前を取得したいです (調べてみましたがエラーになり取得できませんでした) 後コマンドボタンがたくさんあり、コードも長く とても邪魔なので省略したいのですができますか? (左クリックと右クリックで違う処理をした後       MouseDown コマンドボタンの名前で少し処理を変えるコードです) MouseUp (下のコードのような感じです) 回答お願いします Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) Select Case Button Case 1 Range("A1") = 1 Case 2 Range("A1") = 2 End Select End Sub Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) If (コマンドボタンの名前を取得) = "aaa" Then Range("A1") = Range("A1") + 1 Else Range("A1") = Range("A1") - 1 End If End Sub

  • 実行時のコントロール移動について

    実行時にデザイン時と同じようにコントロール移動をおこないたいのですが、コードを忘れてしまいました。もしご存知の方ご教授お願いします。下記にしめしたものが少しだけ覚えているものです。したがってうまく起動できていません。よろしくお願いしたいます。VB6です。w2k Private Sub cmd_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) x1 = X y1 = Y End Sub Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 1 Then cmd.Left = (X - x1) + x1 cmd.Top = (Y - y1) + y1 End If End Sub

  • 「右クリック でドラッグ&ドロップ」で縦横の移動できるようにしたいです。

    お世話になります。 VB6で質問です。   form [ 1000*1000 ] << A picturebox [300*300 ] << B [A]の真中に[B]を配置して、[B]を「右クリック でドラッグ&ドロップ」で縦横の移動できるようにしたいです。 下記のようにしたところ、マウスのみで動いてしまい「右クリック」が関連しません。 Private Sub picturebox_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)  picturebox.Top = Y End Sub  この場合のプログラムを教えて欲しいです。

  • VB6 Form内のDragDrop

    VB6でForm内にCommandButtonがいくつか有ります。 各CommandButtonはClickするとShellオブジェクトでファイルを開く様になっています。 やりたいことは 2つのCommandButton間をDragDrop?によりCaptionを入れ替えたいです。 (CommandButton間をマウスDragDropでCaption名入れ替え) MouseDownとDragDropイベントで何とかなると思いましたがうまくいきません。 Dim dd As Integer Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = vbLeftButton Then dd = 1 'CommandボタンNo, End If End Sub Private Sub Command2_DragDrop(Source As Control, X As Single, Y As Single) Dim cn As String cn = Command2.Caption Command2.Caption = Controls("Command" & dd).Caption Controls("Command" & dd).Caption = cn End Sub CommandButtonプロパティでDragModeを自動にするとShellオブジェクトでファイルが開かないし サイトで調べたところファイルの移動やコマンド自体の移動などで分かりませんでした。 ご教授お願い致します。

  • エクセル2010のコマンドボタンついて

    MouseDownイベントでループ(Doなど)をさせた後 MouseUpイベントでStopさせるコードを作りましたが MouseUpイベントまで行かずずっとループしてしまいます (押されている間はボタンが凹んでいますが このコードにすると凹まず中断しないと 動かせないようになってしまいます) 何が原因がわからないので回答お願いします 下はコードです Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) Select Case Button Case 1 Range("A1") = 1 Case 2 Range("A1") = 3 End Select Do Range("A1") = Range("A1") + Range("A1") Loop End Sub Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) Stop End Sub (Select Case Button Case 1...にしても変わりませんでした)

  • ACCESSの検索について

    過去ログを見たのですが、該当するものが見つからなかったので質問させてください。 すでに入力してあるデータの生年月日から特定の月に誕生日を迎える人を検索したいと思っております。 クエリの検索条件で Like "*" & [Forms]![誕生日検索2]![テキスト0] & "*" とし、フォームの誕生日検索2のテキスト0に入力されたものを抽出したいのですが、クエリで開いてパラメータの入力のところでは「2008/07」とすれば今年の7月に誕生日を迎える人が抽出できるのに、フォームのテキスト0に同じように入力してもデータが抽出されません。 ちなみにフォームのイベントプロシージャは Private Sub コマンド2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) DoCmd.OpenQuery "誕生日検索" End Sub Private Sub テキスト0_AfterUpdate() DoCmd.Requery End Sub としております。 どこをどう直せばうまく抽出できるようになるのでしょうか?

専門家に質問してみよう