Прямо сейчас прокрутка MouseWheel изменяет запись, просматриваемую в моем DGV. Отрицательная iDelta перемещает к следующей записи, а положительная iDelta перемещает к предыдущей записи. Каждая запись содержит верхний/нижний колонтитул и фактические данные в файле dgv.
Я пытаюсь оптимизировать скорость, с которой я могу прокручивать записи. Прежде чем я начал возиться с этим, код загружал каждый верхний/нижний колонтитул, а затем загружал весь dgv записи каждый раз, когда обнаруживается событие MouseWheel.
Я пытаюсь изменить его так, чтобы он загружал только верхний/нижний колонтитул, пока пользователь не сделает паузу (скажем, на ~ 500 мс). Это гарантирует, что ненужные dgv не будут загружены и, таким образом, будут потрачены зря время.
Я действительно изо всех сил пытался найти способ подсчета количества прокруток колеса, способ определить, не прокручивал ли пользователь колесико мыши в течение некоторого времени, или способ вызвать прокрутку колесика мыши. подпрограмма, все еще находясь в текущей подпрограмме прокрутки колесика мыши. Я думаю, что любой из них приведет меня к успеху. Вот что у меня есть до сих пор. Очевидно, это не работает так, как я хочу.
Private Sub SplitContainer1_MouseWheel(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles SplitContainer1.MouseWheel
Dim iDelta As Integer = e.Delta
' Limit the times the stopwatch restarts to every 500ms interval
If numberOfScrolls = 0 Then
mouseScrollStopWatch.Start()
End If
Select Case iButton
Case 1, 2
' If iDelta is negative move to 'next' record
If iDelta < 0 Then
' If 500 ms has passed since the 'first' scroll event
If mouseScrollStopWatch.ElapsedMilliseconds > 500 Then
' Loads the header and footer of the 'next' record
BindPartNumMoveNext()
' Update the dgv
updateDGV()
' Reset the stopwatch
mouseScrollStopWatch.Reset()
' Reset number of Scrolls
numberOfScrolls = 0
' If 500ms has not passed since the 'first' scroll event
Else
' Loads header and footer
BindPartNumMoveNext()
' sets number of scrolls to anything but 0
numberOfScrolls = 1
End If
' If iDelta is positive move to 'previous' record
Else
' If 500 ms has passed since the 'first' scroll event
If mouseScrollStopWatch.ElapsedMilliseconds > 500 Then
' Loads the header and footer of the 'previous' record
BindPartNumMovePrevious()
' Update the dgv
updateDGV()
' Reset the stopwatch
mouseScrollStopWatch.Reset()
' Reset number of Scrolls
numberOfScrolls = 0
' If 500ms has not passed since the 'first' scroll event
Else
' Loads header and footer
BindPartNumMovePrevious()
' sets number of scrolls to anything but 0
numberOfScrolls = 1
End If
End If
' These cases can be ignored for now
Case 3, 4
If iDelta < 0 Then
BindRefDesMoveNext()
Else
BindRefDesMovePrevious()
End If
End Select
End Sub
В этой версии моих попыток проблема заключается в том, что dgv никогда не загружается, если 500 мс не прошло для этой конкретной прокрутки колесика мыши (т. Е. Если последнее событие WheelScroll происходит, когда mouseScrollStopWatch.ElapsedMilliseconds ‹ 500, то dgv никогда не загружается.)
Любые советы о том, как я могу получить больше данных с колеса мыши? Конечная цель — просто увеличить скорость, с которой я могу перемещаться по записям, поэтому я открыт для других решений, которые не вращаются вокруг тех, которые я описал здесь.
Я пытался быть конкретным, но, возможно, я был близок к этому, чтобы понять, что я не включаю важную информацию. Если нет, дайте мне знать, и я включу его.
Reset number of Scrolls
и другие, действительно не нужны. - person Eminem   schedule 08.05.2015