0

引数のような「コントロール名」を渡してこのスニペットを呼び出したい場合、サブは目的のコントロールと対話します

どうすればそれができますか?

これはスニペットです:

#Region " Move a control in real-time "
    ' Change Textbox1 to the desired control name
    Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles textbox1.MouseDown
        If e.Button = Windows.Forms.MouseButtons.Left Then
            textbox1.Capture = False
            Dim ControlMoveMSG As Message = Message.Create(textbox1.Handle, &HA1, New IntPtr(2), IntPtr.Zero)
            Me.DefWndProc(ControlMoveMSG)
        End If
    End Sub
#End Region

更新:解決策:

Private Sub MoveControl(sender As Object, e As EventArgs) Handles _
        TextBox1.MouseDown, _
        TextBox2.MouseDown, _
        PictureBox1.MouseDown

    Dim control As Control = CType(sender, Control)
    control.Capture = False
    Dim ControlMoveMSG As Message = Message.Create(control.Handle, &HA1, New IntPtr(2), IntPtr.Zero)
    Me.DefWndProc(ControlMoveMSG)
End Sub
4

1 に答える 1

1

この場合、そのまま使用できますsendersenderパラメータは、イベントを発生させているコントロールへの参照です。したがって、この同じメソッドを複数のコントロールのイベント ハンドラーとして追加すると、sender現在処理しているイベントを発生させたコントロールになります。たとえば、次のようになります。

Private Sub MouseDown(sender As Object, e As EventArgs) _
        Handles TextBox1.MouseDown, TextBox2.MouseDown
    ' Note in the line above that this method handles the event 
    ' for TextBox1 and TextBox2
    Dim textBox As TextBox = CType(sender, TextBox)
    ' textBox will now be either TextBox1 or TextBox2, accordingly
    textBox.Capture = False
    ' ....
End Sub

このCTypeステートメントは、baseObjectパラメーターを特定のTextBoxクラスにキャストします。この例では、メソッドはTextBoxオブジェクトのイベントのみを処理するため、これは機能します。ただし、他のタイプのコントロールからのイベントを処理する場合は、より一般的なControlタイプ (つまりCType(sender, Control)) にキャストする必要があります。

于 2012-12-18T11:53:44.013 に答える