当光标滚动 richtextbox 时停止计时器

Stopping a timer when cursor is scrolling richtextbox

我正在使用当光标位于富文本框内时停止的计时器 1,因此我已经尝试了一些事件,例如鼠标进入、鼠标按下和获得焦点以停止计时器,但这些在以下情况下不起作用我正在滚动 richtextbox。 当光标位于 richtextbox 内时,哪个事件允许我滚动并保持计时器 1 关闭? 谢谢

似乎没有简单的 one-event 方法可以做到这一点。正如您所发现的,单击滚动条时没有 EnterMouseEnter 事件。我认为以下应该做你想要的事情:

Private isScrollingRtb As Boolean = False

Private Sub RichTextBox1_Enter(sender As Object, e As EventArgs) Handles RichTextBox1.Enter
    'The RTB received focus.
    Timer1.Stop()
End Sub

Private Sub RichTextBox1_Leave(sender As Object, e As EventArgs) Handles RichTextBox1.Leave
    'The RTB lost focus.
    Timer1.Start()
End Sub

Private Sub RichTextBox1_VScroll(sender As Object, e As EventArgs) Handles RichTextBox1.VScroll
    If Not ActiveControl Is RichTextBox1 Then
        'The user scrolled the RTB while it did not have focus.
        Timer1.Stop()
        isScrollingRtb = True
    End If
End Sub

Private Sub Form1_MouseEnter(sender As Object, e As EventArgs) Handles Me.MouseEnter
    If isScrollingRtb Then
        'The user left the RTB after scrolling it without focus.
        Timer1.Start()
        isScrollingRtb = False
    End If
End Sub

当用户单击滚动条时,将引发 VScroll 事件,因此您可以 Stop Timer 该事件。问题是决定何时再次 Start 它。在此示例中,我选择在鼠标指针下一次经过表单本身时执行此操作。