vb.netのフォームの任意の場所でマウスクリックを検出するにはどうすればよいですか?

ラックランコート

ユーザーが特定のオブジェクトをクリックしたかどうかを確認する方法はわかっていますが、ユーザーがどこをクリックしたかは気にせず、クリックしたかどうか(実際のフォームかオブジェクトか)を知る必要があります。または何でも)。私のコードはこれです:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

    If GetAsyncKeyState(1) Then
        Label1.Text = "Left"
    Else
        Label1.Text = "Right"
    End If
End Sub

コードを実行すると、エラーが発生します。

PInvokeStackImbalanceが検出されました

「PInvoke関数 'Mouse click!Mouse_click.Form1 :: GetAsyncKeyState'の呼び出しにより、スタックのバランスが崩れました。これは、マネージPInvokeシグネチャがアンマネージターゲットシグネチャと一致しないことが原因である可能性があります。PInvokeシグネチャの呼び出し規則とパラメーターが一致することを確認してくださいターゲットのアンマネージド署名。」

私はvb.netに非常に慣れていないので、ドキュメントは本当に役に立ちません。どんな助けでも素晴らしいでしょう:)

Apache

これを実際に行うにはいくつかの方法があり、それはあなたが何を達成しようとしているのかによって異なります。1つの方法は、すべてのクリックイベントをルーティングする特定の場所を用意することです。

Public Sub ClickHandler(sender As Object, e As MouseEventArgs) Handles Me.MouseClick, PictureBox1.MouseClick, Label1.MouseClick, Button1.MouseClick
    Label1.Text = String.Format("Clicked ""{0}"" with the {1} mouse button.", sender.name, e.Button.ToString.ToLower)
End Sub

このサブが処理するすべてのイベントに注意してください。また、どのボタンが押されたかを確認したい場合は、次のようなことができる場合があります。

Select Case e.Button
    Case MouseButtons.Left
        Label1.Text = "Left"
    Case MouseButtons.Right
        Label1.Text = "Right"
    Case MouseButtons.Middle
        Label1.Text = "Middle"
    Case Else
        Label1.Text = "Some other button"
End Select

繰り返しになりますが、これは1つの方法にすぎず、コントロールが満載の大規模なアプリや、あらゆるアプリケーションでの作業にはあまり実用的ではありません。そのようなものはより複雑になり、システム全体のフックが必要になる場合があります。

[編集]:
ロビンがコメントした内容(ちなみに、優れた提案)に沿って、すべてのコントロールを前もって含める必要がないように、別のコード行にハンドラーを追加することもできます。実際、私が本当に気に入っているこの方法に従った場合は、フォームの各コントロールでループを使用してこれを行うことができます。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For Each c As Control In Controls
        AddHandler c.MouseClick, AddressOf ClickHandler
    Next
End Sub

Private Sub ClickHandler(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
    Label1.Text = String.Format("Clicked ""{0}"" with the {1} mouse button.", sender.name, e.Button.ToString.ToLower)

    Select Case e.Button
        Case MouseButtons.Left
            Label2.Text = "Left"
        Case MouseButtons.Right
            Label2.Text = "Right"
        Case MouseButtons.Middle
            Label2.Text = "Middle"
        Case Else
            Label2.Text = "Some other button"
    End Select
End Sub

それをありがとう、ロビン!完全に私の心を逃れた...

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

vb.netでdatetimepickerのカスタムフォーマットを設定するにはどうすればよいですか?

分類Dev

vb.netの資格情報を使用してリモートフォルダーにアクセスするにはどうすればよいですか?

分類Dev

vb.net winフォームのグリッドビューでビューを更新するにはどうすればよいですか?

分類Dev

2週間ごとにタスクのリマインダーをvb.netで作成するにはどうすればよいですか?

分類Dev

VB.NETでグローバルマウスイベント(移動、クリック)に登録するにはどうすればよいですか?

分類Dev

VB.NETを使用して画面のDPIを検出するにはどうすればよいですか?

分類Dev

vb.netで小数点以下2桁の変数なしでテキストボックス値をフォーマットするにはどうすればよいですか?

分類Dev

VBの同じフォーム上のあるテキストボックスから別のテキストボックスにテキストを保存/追加するにはどうすればよいですか?

分類Dev

vb.netのクエリを使用してMSAccessで更新するにはどうすればよいですか?

分類Dev

VB.NET-クラスオブジェクトのlinqにカスタムメソッドを追加するにはどうすればよいですか?

分類Dev

vb.netの配列クラスで「withevents」を使用するにはどうすればよいですか?

分類Dev

vb:リストボックス内の複数のアイテムを一度に選択するにはどうすればよいですか?

分類Dev

vb.netのボタンクリックでdatagridviewセルが空かどうかを確認するにはどうすればよいですか?

分類Dev

下記のタスク(vb.net)を実行するにはどうすればよいですか?

分類Dev

Excel VBを使用して、テキストボックスが2つ以上のユーザーフォームからのものであるテキストボックスにデータを入力するよりも優れたデータを入力するにはどうすればよいですか?

分類Dev

VB.NETでタブページのインデックスを名前で取得するにはどうすればよいですか?

分類Dev

VB.NETのフォームのハンドルに配列を配置するにはどうすればよいですか?

分類Dev

vb.netを使用してレジストリキーの複数のvalueNamesから値を検索するにはどうすればよいですか

分類Dev

最近のVisualStudioで古いVBマクロを実行するにはどうすればよいですか?

分類Dev

VB.netの既存のオブジェクトを参照するにはどうすればよいですか?

分類Dev

vb.netのプリフェッチフォルダを削除するにはどうすればよいですか?

分類Dev

vb.netで角括弧間のスペースを削除するにはどうすればよいですか?

分類Dev

Visual Studio 2010 UltimateのVB.NETで「catchwithrethrow」ブロックのコードカバレッジを100%取得するにはどうすればよいですか?

分類Dev

vb.netのグラフのデータポイントにカスタムラベルを配置するにはどうすればよいですか?

分類Dev

ユーザーがvb6.0プロジェクトソフトウェアからログアウトしたときにネットワークドライバーのマップを解除するにはどうすればよいですか?

分類Dev

VB.Net:右クリックでグループボックスを表示するにはどうすればよいですか?

分類Dev

vb.netでリストボックスにアイテムを上下に追加するにはどうすればよいですか?

分類Dev

vbのクラスでリストにアイテムを追加するにはどうすればよいですか?

分類Dev

vb.netでテキストボックスの読み取り専用の背景色を見つけるにはどうすればよいですか?

Related 関連記事

  1. 1

    vb.netでdatetimepickerのカスタムフォーマットを設定するにはどうすればよいですか?

  2. 2

    vb.netの資格情報を使用してリモートフォルダーにアクセスするにはどうすればよいですか?

  3. 3

    vb.net winフォームのグリッドビューでビューを更新するにはどうすればよいですか?

  4. 4

    2週間ごとにタスクのリマインダーをvb.netで作成するにはどうすればよいですか?

  5. 5

    VB.NETでグローバルマウスイベント(移動、クリック)に登録するにはどうすればよいですか?

  6. 6

    VB.NETを使用して画面のDPIを検出するにはどうすればよいですか?

  7. 7

    vb.netで小数点以下2桁の変数なしでテキストボックス値をフォーマットするにはどうすればよいですか?

  8. 8

    VBの同じフォーム上のあるテキストボックスから別のテキストボックスにテキストを保存/追加するにはどうすればよいですか?

  9. 9

    vb.netのクエリを使用してMSAccessで更新するにはどうすればよいですか?

  10. 10

    VB.NET-クラスオブジェクトのlinqにカスタムメソッドを追加するにはどうすればよいですか?

  11. 11

    vb.netの配列クラスで「withevents」を使用するにはどうすればよいですか?

  12. 12

    vb:リストボックス内の複数のアイテムを一度に選択するにはどうすればよいですか?

  13. 13

    vb.netのボタンクリックでdatagridviewセルが空かどうかを確認するにはどうすればよいですか?

  14. 14

    下記のタスク(vb.net)を実行するにはどうすればよいですか?

  15. 15

    Excel VBを使用して、テキストボックスが2つ以上のユーザーフォームからのものであるテキストボックスにデータを入力するよりも優れたデータを入力するにはどうすればよいですか?

  16. 16

    VB.NETでタブページのインデックスを名前で取得するにはどうすればよいですか?

  17. 17

    VB.NETのフォームのハンドルに配列を配置するにはどうすればよいですか?

  18. 18

    vb.netを使用してレジストリキーの複数のvalueNamesから値を検索するにはどうすればよいですか

  19. 19

    最近のVisualStudioで古いVBマクロを実行するにはどうすればよいですか?

  20. 20

    VB.netの既存のオブジェクトを参照するにはどうすればよいですか?

  21. 21

    vb.netのプリフェッチフォルダを削除するにはどうすればよいですか?

  22. 22

    vb.netで角括弧間のスペースを削除するにはどうすればよいですか?

  23. 23

    Visual Studio 2010 UltimateのVB.NETで「catchwithrethrow」ブロックのコードカバレッジを100%取得するにはどうすればよいですか?

  24. 24

    vb.netのグラフのデータポイントにカスタムラベルを配置するにはどうすればよいですか?

  25. 25

    ユーザーがvb6.0プロジェクトソフトウェアからログアウトしたときにネットワークドライバーのマップを解除するにはどうすればよいですか?

  26. 26

    VB.Net:右クリックでグループボックスを表示するにはどうすればよいですか?

  27. 27

    vb.netでリストボックスにアイテムを上下に追加するにはどうすればよいですか?

  28. 28

    vbのクラスでリストにアイテムを追加するにはどうすればよいですか?

  29. 29

    vb.netでテキストボックスの読み取り専用の背景色を見つけるにはどうすればよいですか?

ホットタグ

アーカイブ