单击鼠标后不会触发MouseLeave事件吗?

时间:2019-08-08 19:04:35

标签: vb.net winforms listbox mouseevent mouseover

我的Windows窗体中有一个简单的问题。我有一个列表框,它充当我输入的某些串行数据的日志,并且希望能够使用滚轮在其中移动。为此,我有一个变量hoverList,最初将其设置为0,该变量在列表框的MouseEnter事件中变为1。然后,对于MouseWheel事件,我增加或减少列表框中的选定索引,但是仅当hoverList为1时。我希望当鼠标离开列表框上方的区域时,将触发MouseLeave事件,该事件会将hoverList设置为0并停止允许“滚动”。在我单击列表框之前,该方法工作正常。我仍然可以很好地滚动,但是现在我可以在屏幕上的所有位置滚动列表框。似乎在列表框内单击不会触发MouseLeave事件。是这样吗如果是这样,是否有解决此问题的解决方法?这三个事件的代码如下所示

Private Sub LstSerialData_MouseLeave(sender As Object, e As EventArgs) Handles lstSerialData.MouseLeave
    hoverList = 0
End Sub

Private Sub LstSerialData_MouseEnter(sender As Object, e As EventArgs) Handles lstSerialData.MouseEnter
    hoverList = 1
End Sub

Private Sub Form1_MouseWheel(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseWheel
    If hoverList Then
        If e.Delta > 0 Then
            If lstSerialData.SelectedIndex > 10 Then
                lstSerialData.SelectedIndex -= 10
            Else
                lstSerialData.SelectedIndex = 0
            End If
        Else
            If lstSerialData.SelectedIndex < lstSerialData.Items.Count - 10 Then
                lstSerialData.SelectedIndex += 10
            Else
                lstSerialData.SelectedIndex = lstSerialData.Items.Count - 1
            End If
        End If
    End If
End Sub

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。在列表框中单击时,它将成为所选控件;由于它具有滚动条,因此实际上允许我使用滚轮来滚动它。将光标移出列表框会禁用内置的 my 滚动功能,但不会取消选择该列表框,这意味着我仍然可以滚动浏览它。我编辑了MouseEnterMouseLeave事件以分别选择和取消选择列表框。这意味着,一旦我的光标离开列表框,无论我是否单击了它,它都会被取消选择,并且不再允许我滚动它。这也意味着不再需要我的贫民窟变通办法来允许滚动。