【问题标题】:Stopping a timer when cursor is scrolling richtextbox光标滚动富文本框时停止计时器
【发布时间】:2020-09-29 09:56:53
【问题描述】:

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

【问题讨论】:

    标签: vb.net richtextbox


    【解决方案1】:

    似乎没有简单的单事件方法来做到这一点。正如您所发现的,单击滚动条时没有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。在此示例中,我选择在鼠标指针下一次移到表单本身时这样做。

    【讨论】:

    • 嗨,不幸的是,事件输入在滚动时也没有停止计时器。显然我在做 Timer1.Stop() 。
    • @Mattia,我已经替换了我原来的答案。
    • 嗨@jmcilhinney,谢谢它适用于richtextbox。如果是列表框,你能帮我吗?我意识到列表框中没有 Vscroll 事件。我应该改用什么事件?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多