Danamo51 Ответов: 2

Как медленно увеличить счетчик, нажимая мышкой на поле с картинками?


Использование VB.Net (версия Visual Studio Community 2017)

Я хотел бы использовать изображение кнопки для изменения значения счетчика. Я могу сделать это один раз для каждого щелчка по картинке, но я хочу, чтобы значение счетчика продолжало меняться, пока мышь удерживается на картинке, и останавливалось, когда мышь отпускается. Кроме того, я хочу, чтобы значение увеличивалось медленно, например +1 за каждые 100 миллисекунд или около того, пока мышь находится внизу.

Есть предложения?

Что я уже пробовал:

Private Sub picButtonLeft_MouseDown(sender As Object, e As MouseEventArgs) Handles picButtonLeft.MouseDown

counter = counter + 1

2 Ответов

Рейтинг:
2

Dave Kreskowiak

Используйте таймер. Настройте и запустите таймер в событии MouseDown и обработайте событие Tick таймера. Там вы увеличите свой счетчик. Выключите таймер в событии MouseUp.


Рейтинг:
1

George Swan

Попробуйте использовать Async Await Task-based Pattern. Ловушка для PreviewMouseLeftButtonDown и PreviewMouseLeftButtonUp события. Я бы не стал использовать MouseLeftButtonDown поскольку он обрабатывается событием нажатия кнопки и не будет захвачен вашим методом. Я только что заметил, что ваша кнопка-это не кнопка, а коробка с картинками, но идея точно такая же


Imports System.Threading

Class MainWindow
    Dim cts As CancellationTokenSource

    Dim counter As Int32
    Private Async Sub PicButton_OnMouseDown(sender As Object, e As MouseEventArgs)
        ' Instantiate the CancellationTokenSource.
        cts = New CancellationTokenSource()
        Try
            While (True)
                'The CancellationTokenSource causes the loop to be broken
                'by throwing  an  OperationCanceledException
                'when the CancellationTokenSource.Cancel() method
                'is called in the mouseUp handler
                ' Asynchronous Delay 300millisecs
                'Ui thread is not blocked
                Await Task.Delay(300, cts.Token)
                counter = counter + 1
            End While

        Catch ex As OperationCanceledException
            cts = Nothing
            'Reset the counter here, if necessary
        End Try
    End Sub
    Private Sub PicButton_OnMouseUp(sender As Object, e As MouseEventArgs)
        If cts IsNot Nothing Then
            cts.Cancel()
        End If
    End Sub