Получить переменную за два клика по форме - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь назначить два щелчка двум переменным в моем событии Mouse_Down в моей форме. Вот начальный код, с которым я работаю для события Mouse_Down. Что я пытаюсь сделать, так это щелкнуть две точки в форме, получить местоположение X и Y (тогда я получу размер моей кнопки). Пример: сначала нажмите, чтобы получить X и Y, затем нажмите, чтобы получить X и Y, затем нажмите кнопку ... повторяйте это, пока я не выйду.

 Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles MyBase.MouseDown

    Dim XYClickOne, XYClickTwo
    Dim count As Integer
    count = 0

    Do
        XYClickOne = e.X & "," & e.Y
        XYClickTwo = e.X & "," & e.Y
        count = count + 1
    Loop Until count = 2

    Button1.PerformClick()  'After 2nd click, create button.

End Sub

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Подумал, что вам может понравиться быстрый пример создания «выделения резинкой». Щелкните и перетащите форму левой кнопкой мыши:

Артефакты взяты с моего устройства записи экрана, на самом деле он рисовался плавно, не оставляя линий:

введите описание изображения здесь

Код:

Public Class Form1

    Private ptA, ptB As Point
    Private count As Integer = 0
    Private firstBoxDrawn As Boolean = False

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
        If e.Button = MouseButtons.Left Then
            ptA = Me.PointToScreen(New Point(e.X, e.Y))
            ptB = ptA
            firstBoxDrawn = False
        End If
    End Sub

    Private Sub Form1_MouseMove(sender As Object, e As MouseEventArgs) Handles Me.MouseMove
        If e.Button = MouseButtons.Left Then
            If firstBoxDrawn Then
                ' erase the previous box by drawing it again
                ControlPaint.DrawReversibleFrame(RectangleFromPoints(ptA, ptB), Color.Black, FrameStyle.Dashed)
            End If
            ptB = Me.PointToScreen(New Point(e.X, e.Y))
            ' draw the new box
            ControlPaint.DrawReversibleFrame(RectangleFromPoints(ptA, ptB), Color.Black, FrameStyle.Dashed)
            firstBoxDrawn = True
        End If
    End Sub

    Private Sub Form1_MouseUp(sender As Object, e As MouseEventArgs) Handles Me.MouseUp
        If e.Button = MouseButtons.Left Then
            ' erase the box
            ControlPaint.DrawReversibleFrame(RectangleFromPoints(ptA, ptB), Color.Black, FrameStyle.Dashed)
            CreateButton(Me.PointToClient(ptA), Me.PointToClient(ptB))
        End If
    End Sub

    Private Sub CreateButton(ByVal ptA As Point, ByVal ptB As Point)
        Dim btn As New Button
        btn.Text = "X"
        btn.Bounds = RectangleFromPoints(ptA, ptB)
        Me.Controls.Add(btn)
    End Sub

    Private Function RectangleFromPoints(ByVal ptA As Point, ByVal ptB As Point) As Rectangle
        Dim pt As New Point(Math.Min(ptA.X, ptB.X), Math.Min(ptA.Y, ptB.Y))
        Dim sz As New Size(Math.Abs(ptA.X - ptB.X) + 1, Math.Abs(ptA.Y - ptB.Y) + 1)
        Return New Rectangle(pt, sz)
    End Function

End Class
0 голосов
/ 14 июля 2020

Переместите эти переменные на уровень формы, чтобы они были доступны другими методами и сохранялись при щелчках мыши. Вот быстрый пример:

Public Class Form1

    Private points(2) As Point
    Private count As Integer = 0

    Private Sub Form1_MouseDown(sender As Object, e As MouseEventArgs) Handles Me.MouseDown
        If e.Button = MouseButtons.Left Then
            points(count) = New Point(e.X, e.Y)
            count = count + 1
            If count = 2 Then
                count = 0
                CreateButton(points(0), points(1))
            End If
        End If
    End Sub

    Private Sub CreateButton(ByVal ptA As Point, ByVal ptB As Point)
        Dim pt As New Point(Math.Min(ptA.X, ptB.X), Math.Min(ptA.Y, ptB.Y))
        Dim sz As New Size(Math.Abs(ptA.X - ptB.X) + 1, Math.Abs(ptA.Y - ptB.Y) + 1)
        Dim btn As New Button
        btn.Bounds = New Rectangle(pt, sz)
        btn.Text = "X"
        Me.Controls.Add(btn)
    End Sub

End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...