【发布时间】:2020-09-29 09:56:53
【问题描述】:
我正在使用一个 timer1,它在光标位于富文本框内时停止,所以我已经尝试了一些事件,例如鼠标输入、鼠标按下和获得焦点以停止计时器,但是当我在滚动富文本框。 当光标位于富文本框内时,哪个事件允许我滚动并关闭计时器 1? 谢谢
【问题讨论】:
标签: vb.net richtextbox
我正在使用一个 timer1,它在光标位于富文本框内时停止,所以我已经尝试了一些事件,例如鼠标输入、鼠标按下和获得焦点以停止计时器,但是当我在滚动富文本框。 当光标位于富文本框内时,哪个事件允许我滚动并关闭计时器 1? 谢谢
【问题讨论】:
标签: vb.net richtextbox
似乎没有简单的单事件方法来做到这一点。正如您所发现的,单击滚动条时没有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。在此示例中,我选择在鼠标指针下一次移到表单本身时这样做。
【讨论】: