• ベストアンサー

クリックした場所にFormを開く

教えてください! VBでクリックした場所にFormを開くには、どうしたらいいですか? Private Sub Command3_Click() Frm.Show End Sub

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

  • ベストアンサー
  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.2

こんにちは、じゃんぬねっと です。 > いわゆるポップアップメニューのように、 > 「ボタンクリックしたとき、そのときマウスがいる場所を基点にフォームを開きたい」 > のです。 なるほど、CommandButton のクリックイベントだったので、少々勘違いしていました。 ポップアップとすると、マウス ポインタの位置を左上基点で開くということになるので、以下のような感じになるでしょう。 Option Explicit Private Declare Function GetCursorPos Lib "USER32.DLL" (ByRef lpPoint As Point) As Long Private Type Point   X As Long   Y As Long End Type Private Sub Form_Click()   Dim lpPoint As Point   Call GetCursorPos(lpPoint)   Dim frm1 As Form1   Set frm1 = New Form1   frm1.Left = lpPoint.X * Screen.TwipsPerPixelX   frm1.Top = lpPoint.Y * Screen.TwipsPerPixelY   Call frm1.Show(vbModeless, Me) End Sub

shota888
質問者

お礼

まさにやりたい動きが実現できました!! ありがとうございました!!! APIを使うんですね・・・

その他の回答 (2)

noname#185804
noname#185804
回答No.3

すみません少し確認させて下さい VBのバージョンはいくつでしょうか? マウスクリックですが、フォーム上でマウスをクリックすると 別のフォームが開く? 若しくはデスクトップなどフォーム以外の場所でマウスを クリックするとフォームが開く? 若しくは両方?

shota888
質問者

お礼

じゃんぬさまのご回答により解決することができました。 ありがとうございました。

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.1

こんにちは、じゃんぬねっと です。 > VBでクリックした場所にFormを開くには、どうしたらいいですか? 「クリックした場所」だけですと、厳密な場所はわかりません。 よって以下のようなサンプルにしかなりませんでしたが、 これを応用して望む形にできるのではないでしょうか? Private Sub Command1_Click()   Dim frm1 As Form1   Set frm1 = New Form1   frm1.Left = Me.Command1.Left + Me.Command1.Width   frm1.Top = Me.Command1.Top + Me.Command1.Height   Call frm1.Show(vbModal, Me) End Sub

shota888
質問者

お礼

じゃんぬねっとさま 回答ありがとうございます。言葉足らずで申し訳ありませんでした。 いわゆるポップアップメニューのように、 「ボタンクリックしたとき、そのときマウスがいる場所を基点にフォームを開きたい」 のです。 Windowsの画面上の座標がわかればできそうなので・・・ 「ボタンクリックしたときのWindows画面上の位置」 を取得する方法を探しています。

関連するQ&A

  • Formオブジェクトについて

    Formオブジェクトに関する質問です。 ある関数にフォームオブジェクトを引数として渡してやりたいのですが、何かよい方法はありますでしょうか? 例) Private Sub cmdTest_Click(Index as Integer) Dim frm as Form If Index = 0 then Load_Test(Form 2) Else Load_Test(Form 3) End if End Sub Private Sub Load_Test(frm as Form) frm.Show frm.Label1.Caption = "TEST” End Sub

  • vb6.0のFormの遷移がうまくいきません。

    Form1からForm2に移動するときのプログラム Private Sub Command5_Click() Form2.Show With Form1 .Enabled = False .Visible = False End With End Sub です。 Form2からForm1に移動するときのプログラム Private Sub Command1_Click() Form1.Show With Form2 .Enabled = False .Visible = False End With End Sub Form1からForm2に移動し、Form2からForm1に移動する 事は出来たのですが。もう一度、Form1からForm2に 移動しようとするとBeep音が鳴り移動できません。 なぜ、2回目は失敗するのでしょうか? プログラムに問題はありますか?

  • フォームのアクティブと非アクティブ表示について

    Form1からForm2を表示するという処理を以下のようにコーディングしてみました。 **Form1.frm*** Private Sub Command1_Click() Form1.Hide Form1.vbModal Form1.Show End Sub **Form2.frm*** Private Sub Command1_Click() Unlaod Me End Sub 画面にエクスプローラ等のウィンドウが表示されているときに、Form2を表示させようとすると非アクティブ状態で表示されてしまいます。 また、Form2をUnloadするとForm1が表示されるのですが、その際に、Form1のタイトルと、タスクバーに表示されているボタンが反転した後非アクティブ状態になってしまいます。 フォームは常にアクティブで表示させたいのですが、どうすればよいのでしょうか?

  • 標準モジュールとイベントの質問

    初めて質問します。 ビジュアルベーシックで標準モジュールで ボタンのクリックイベントを実行したいのですが どうやってプログラムすればいいんでしょうか? 今の会社に入っていきなりVBの仕事させられて とっても困っています。 Private Sub Frm1Command1_Click() Call Module1.Frm1Command1_Click End Sub こんな書き方じゃなくて、標準モジュール内で Public Sub Command1_Click() MsgBox "sine" End Sub って書いて実行できるようにしなくてはダメなんです。 どうすればいいんでしょうか? もしかして無理なんでしょうか? これ、上司の嫌がらせだったらイヤですね・・・。

  • 他のFormのクリックイベント

    教えてください! 他のFormのクリックイベントを実行できますか? Form2のButton2をクリックした時に、Form1の「Button1_Click」を実行させることができますか? 出来るとしたら、Form2の「Button2_Click」にはどのように記載したらいいのでしょうか? [Form1]より Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ [Form2]より Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs)・・・ End Sub 宜しくお願いします。

  • VB2010の、Formを開く動作に関する質問です

    VB2010のFormについてお聞きしたいことがあります。 例えばForm1とForm2の2つがあるとして、 ・Form1上のボタンをクリック後Form2が表示される ・Form2を表示後Form1は自動で閉じられる。 この様な事をするにはどの様に行えばよろしいでしょうか? 試しに、 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click   Form2.Show()   Me.Close() End Sub と、してみたのですが Form2が表示された直後に1と2両方消えてしまいました。 改善方法を教えていただけると嬉しいです。 よろしくお願いいたします。

  • Paintpicture描画時のクリックイベント

    お知恵を貸してください! ただいま「ランダムな場所にImageを描画して、そのイメージをクリックするとイベントが起きる」という プログラムを組んでいます。 Paintpictureを使って、ランダムに描画することはできたのですが、 描画したイメージをクリックしてもイベントの動作を行ってくれません。 使用しているのはVB6.0です。 プログラムは以下のとおりです。 Imageは透過GIF(Image1)と保険にマスクイメージ(Image2)を使用しております。 ------- ・描画プログラム Private Sub Command1_Click() End End Sub Private Sub Timer1_Timer() x = Int(rnd * Form1.Width) - (Image1.Width \ 2) y = Int(rnd * Form1.Height) - (Image1.Height \ 2) Form1.Refresh Form1.PaintPicture Image2, x, y, , , , , , , vbSrcAnd Form1.PaintPicture Image1, x, y, , , , , , , vbSrcPaint End Sub ------- ・行動プログラム Private Sub Image1_Click() MsgBox "Score gat" End Sub ------- アドバイス、ご指摘お願いいたします。

  • form1 から form2 へのデータの受け渡し方

    まだまだ勉強中の初心者なのですが、お願いします。 今同プロジェクト内の form1 から form2 へデータを渡そうとしているのですが、 'form1 '------------------------------- Private Sub Command2_Click() Form2.m_Get.ites = 1 Form2.Show (1) End Sub 'form2 '-------------------------------- Public m_iGet As TES 'Module1 '-------------------------------- Type TES ites As Integer End Type 理想はこのようにform2の構造体へform1から値を代入したいのですが。 コンパイルエラー 定数、固定長文字列、配列、ユーザー定義型および Declareステートメントはオブジェクトモジュールの パブリックメンバとして使用できません。   ということはこの渡し方は無理なんですね。 配列も無理ですね。 なるべくグローバル変数でのやり取りはしたくはないのですが、、、。 何か他にいい方法ありますか? よろしくお願いします。

  • Form1.vbをイベントなしで動作させるには?

    VB2005初心者で困っています。 Menu.vbとForm1.vb, Form2vb, Form3.vb・・・を作り、Menu.vbのButton1_ClickでForm1.Show()としてForm1.vbに移行し、次にForm1のButton1_clickイベントでExcelからDataを読み込んでGraphを書かせています。(この時は問題なく動作しています) これを、Form1に移行したらすぐにGraphを表示しようとして、Form1.vbの Public Class Form1 Private Sub Button_Clic(Byval sender As System・・・・・)Handles Button1.click   Dim g As Graphics   ・・・・ を変更して、  Private Sub Form1_Load(Byval sender As System・・・・)Handles MyBase.load Me.Show() Dim g As Graphics   ・・・・ と、しましたが、一瞬Graphは表示しますが、すぐに消えます。 また、罫線はまったく表示しません。 Button_ClickイベントなしでForm1を動かすにはどうすればよいのでしょうか?

  • Form1で指定した命令をForm2で実行させたい。

    開発環境はVB6.0です。 Form1にA・B・Cの3つのボタンを用意します。 格ボタンを押した時各自が用意した画像ファイルをForm2に表示させます。 という事をしたいんですが、 Form1にAのボタンと画像を表示するなら Private Sub Form_Load() ChDir "c:\gazou\a" End Sub Private Sub Command1_Click() For i = 0 To 2 fn = Chr(48 + i) & ".jpg" Image1(i).Picture = LoadPicture(fn) Next i End Sub 表示されるのですが、『"C:\gazou\a"』の部分が"C:\gazou\b"や"C:\gazou\c"にしないといけないので困っています。 しかもFormが違うのでとても困ってます><