locked
FAQs: 在一个RichTextBox中,怎么使用滚动条? RRS feed

  • 问题

  • 为了帮助大家更好地学习 .Net Framework 技术,微软论坛技术支持团队编辑了一些列的 ".Net Framework 常见问题及解答" 精华帖。

    本帖的主题是:在一个RichTextBox中,怎么使用滚动条?

    如果您觉得这个帖子对您的学习、工作有所帮助,请再把这个帖子分享给你的同学、同事和朋友。

    如果您想阅读更多的 ".Net Framework 常见问题及解答",请打开索引页面:
    http://social.msdn.microsoft.com/Forums/zh-CN/2212/thread/f2a90155-c760-4d5d-ba2e-6b0e427cb6eb


    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。
    2011年2月15日 11:21

答案

  • 试着使用两个Windows API中的 GetScrollPosPostMessage。其中GetScrollPos常用来得到RichTextBox现在的位置。而PostMessage是用来向创建这个窗体所在线程的消息队列中发送向下滚动消息。

    代码块:

    <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="PostMessage")> _

     PublicSharedFunctionPostMessage(ByValhwndAsInteger, ByValwMsgAsInteger, ByValwParamAsInteger, ByVallParamAsInteger) AsInteger

     EndFunction

    <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="GetScrollPos")> _

     PublicSharedFunctionGetScrollPos(ByValhwndAsInteger, ByValnBarAsInteger) AsInteger

     EndFunction

     PublicConst WM_VSCROLL AsInteger = 277        

     PublicConst SB_THUMBPOSITION AsInteger = 4

     PublicConst SBS_VERT AsInteger = 1

     

     Private previousPosAsInteger = 0 

     PrivateSubRTBAutoScroll_Load(ByVal sender AsObject, ByVal e AsEventArgs) HandlesMyBase.Load

         Me.RichTextBox1.[Select](0, 0)

         Me.RichTextBox1.ScrollToCaret()

         Me.Timer1.Interval = 300

         AddHandlerMe.Timer1.Tick, AddressOf timer1_Tick

     

         Dim td AsNewDateTime()

         Me.Text = td.ToString()

     EndSub

     

     PrivateSub timer1_Tick(ByVal sender AsObject, ByVal e AsEventArgs)

        Dim currentPosAsInteger = GetScrollPos(CInt(Me.richTextBox1.Handle), SBS_VERT)

        If previousPos<>currentPosOr Else currentPos = 0 Then

            previousPos = currentPos

            PostMessage(CInt(Me.richTextBox1.Handle), WM_VSCROLL, SB_THUMBPOSITION + 65536 * (currentPos + 1), 0)

        EndIf

     EndSub

    PrivateSub Button1_Click_1(ByVal sender AsSystem.Object, ByVal e AsSystem.EventArgs) Handles Button1.Click

        If Button1.Text = "Auto Scroll"Then

            Button1.Text = "Pause"

            Timer1.Enabled = True

        Else If Button1.Text = "Pause" Then

            Button1.Text = "Auto Scroll"

            Timer1.Enabled = False

        EndIf

          EndSub

    相关的帖子:

    http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2102412&SiteID=1

    2011年2月15日 11:22