首页 > 解决方案 > 光标滚动富文本框时停止计时器

问题描述

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

标签: vb.netrichtextbox

解决方案


似乎没有简单的单一事件方式来做到这一点。正如您所发现的,单击滚动条时没有Enter或事件。MouseEnter我认为以下应该做你想做的事情:

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再次使用它。在此示例中,我选择在鼠标指针下一次移过表单本身时执行此操作。


推荐阅读