投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/4/1 15:57:09
マウス・キーボード・フォーカス遷移系のイベントデータを確認する際に、MsgBox を使用することは避けてください。
イベントの流れが阻害されてしまうため、連続して実行した場合とで、動作が変わってしまうことがあります。

代わりに、Debug.WriteLine を使うなどして確認頂くことをお奨めします。


> 20、50は、最初に作られたButtonの位置になります。
るきおさんの説明にもありましたが、MouseUpイベントはそのときのマウスの位置とは関係がなく、
MouseDown イベントを発生させたボタンと同じボタンで発生するからです。

つまり、MouseUp イベントの sender は、現在のマウス座標に関係なく、
MouseDown が発生した時の sender と同じである、ということです。

Private Sub Buttons_MouseUp(sender As Object, e As MouseEventArgs) Handles Button1.MouseUp, Button2.MouseUp, Button3.MouseUp
  Label1.Text = CStr(Button1.Capture)
  Label2.Text = CStr(Button2.Capture)
  Label3.Text = CStr(Button3.Capture)
End Sub


上記を試すと、マウスボタンを離した時の座標がどこにあったとしても、
Capture が True になるのは、MouseDown された時のボタンであることが分かるかと思います。


> SharpDX.RawInputを、.NETに追加する方法を、今後の参考に、教えて頂けたら、幸いです。

お使いの Visual Studio のバージョンにもよりますが、よほど古い物でなければ、
[ツール]-[NuGet パッケージ マネージャー] というメニュー項目があると思います。

そこから NuGet パッケージの管理画面を起動し、
パッケージ ソースに "nuget.org" を選択した上で、
「参照」タブに切り替えて検索ボックスに「SharpDX.RawInput」と入力して、
プロジェクトにインストールしてみてください。