投稿者 snowmansnow  (社会人) 投稿日時 2021/11/17 21:06:44
こんばんは、魔界の仮面弁士様

 こんがらがっていますが、少し解決いたしました。

 >たとえばこんな感じ。
 凄いです。
 いたる所に自分では使えない表現があって、真似をしたり、
 るきお様のwebなどで勉強しなくては分からない事ばかりでした。

 >どのキーとどのキーの同時押しを想定しておられますか?
 アルファベットと数字の同時複数押しを考えてました。
 マウスクリックのポイントの意味を表現しようとしていました。

 >Shift, Ctrl, Alt といった「修飾キー」は同時押しに対応していますが、
>それ以外のキーは、そもそも同時押しを保証していないためです。
 他のwebでも、最新のキーが取得されるような記述でした。

 それを逆手にとって
    kochakoさんのweb(下記)を参考にLISTに代入していきます
   'https://seesaawiki.jp/pg-note/d/%ca%a3%bf%f4%a5%ad%a1%bc%b2%a1%b2%bc%be%f5%c2%d6%a4%ce%c8%bd%c4%ea
   リストに追加、削除する形にしましたので、
  一応、どんなキーでも何個でも押した事がわかる仕様になりました

 >MyBase / MyClass / Me のことでしょうか?
 はい、オブジェクト指向?のプログラミングをしていないので、
 >  '通常であれば、これら 3 つは同じように動作しますが… 
 で、同じに感じるレベルです。
 これもるきお様のwebなどで勉強しなくてはならないです。

>このコードですと、クリックが複数回行われた場合、
>前回クリックした時に割り当ててあった BackgroundImage に対して
>明示的な Dispose が行われていないことになってしまいます。
>きちんと片づけた方が良いですね。 
 これも、解決できず、1回だけ有効な形に変更してみました。


Imports System.Drawing
Imports System.Windows.Forms
Imports System.IO
Imports System.Text

Public Class Form1

    Public x, y, ini, cnt As Long
    Public k, kchar As String
    Public m(), keysA() As String
    Public xp(), yp() As Long
    Public keys = New List(Of String)()

    Dim col As Color

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.KeyPreview = True
        'https://docs.microsoft.com/ja-jp/office/vba/api/access.form.keypreview 
        'http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=30670 
        ini = 0
    End Sub

    Private Sub Form1_MouseUp(ByVal sender As ObjectByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp

        Me.Text = $"MouseUp:{e.Button} , {e.Location}"

        cnt = cnt + 1
        ReDim Preserve m(cnt), xp(cnt), yp(cnt), keysA(cnt)

        'フォーム上の座標でマウスポインタの位置を取得する 
        '画面座標でマウスポインタの位置を取得する 
        Dim sp As System.Drawing.Point = System.Windows.Forms.Cursor.Position
        '画面座標をクライアント座標に変換する 
        Dim cp As System.Drawing.Point = Me.PointToClient(sp)
        'X座標を取得する 
        Dim x As Integer = cp.X
        'Y座標を取得する 
        Dim y As Integer = cp.Y
        'https://dobon.net/vb/dotnet/system/cursorposition.html 
        Dim rc, gc, bc As Long

        If e.Button = MouseButtons.Left Then
            'MsgBox(kchar & "クリックしました!(" & x & "," & y & ")") 
            '   Me.CreateGraphics.Clear(Me.BackColor) 
            m(cnt) = "L"
            col = Color.FromArgb(255, 0, 0)
        End If
        If e.Button = MouseButtons.Right Then
            'MsgBox(kchar & "クリックしました!(" & x & "," & y & ")") 
            '   Me.CreateGraphics.Clear(Me.BackColor) 
            m(cnt) = "R"
            col = Color.FromArgb(0, 255, 0)
        End If
        xp(cnt) = x
        yp(cnt) = y
        'https://dobon.net/vb/bbs/log3-46/27779.html 
        keysA(cnt) = TakeOut(keys)
        keys.Clear()
        Invalidate()
    End Sub