переместите курсор в конец текстового поля / richtextbox

Я создаю приложение для автоматического набора текста. как это работает: • Щелкните по загрузке текстового файла (файл будет загружен в richtextbox2) • Нажмите Start: (Таймер начнет вводить код в richtextbox1 из richtextbox2) • Но здесь я застрял с проблемой:

(Я уже использовал следующий код, но у меня не работает) использовал код:

RichTextBox1.SelectionStart = RichTextBox1.TextLength
RichTextBox1.ScrollToCaret()

Но значение таймера равно 100, и он работает с кодом count_: Таким образом, полоса прокрутки непрерывно перемещается ▲ ▼ ▲ ▼ ▲ ▼ (вверх, вниз, вверх вниз, ...), если я удалил этот код: тогда полоса прокрутки не опускается автоматически. Если это сделано вручную, я попадаю в первую строку, 1-е слово автоматически, если таймер работает ...

Так что, пожалуйста, помогите мне, что я могу сделать


person user2900109    schedule 20.10.2013    source источник
comment
Взгляните на это: stackoverflow.com/questions/7518876/   -  person Jerry    schedule 20.10.2013


Ответы (3)


Чтобы предотвратить эффект отскока RichTextbox ▲ ▼, когда вертикальная черта внизу, вы можете вставить класс ниже в свой проект и использовать его следующим образом:

 RichTextBox1.Select(RichTextBox1.TextLength - 1, 1)

 If Not ScrollBarInfo.IsAtBottom(RichTextBox1) Then
    RichTextBox1.ScrollToCaret()
 End If

Это моя измененная версия из кода, представленного здесь: Как узнать, достигла ли вертикальная полоса прокрутки RichTextBox максимального значения? @ King King

#Region " Scrollbar Info "

Public Class ScrollBarInfo

    <System.Runtime.InteropServices.DllImport("user32")> _
    Private Shared Function GetScrollInfo(hwnd As IntPtr, nBar As Integer, ByRef scrollInfo As SCROLLINFO) As Integer
    End Function

    Private Shared scrollInf As New SCROLLINFO

    Private Structure SCROLLINFO
        Public cbSize As Integer
        Public fMask As Integer
        Public min As Integer
        Public max As Integer
        Public nPage As Integer
        Public nPos As Integer
        Public nTrackPos As Integer
    End Structure

    Private Shared Sub Get_ScrollInfo(control As Control)
        scrollInf = New SCROLLINFO()
        scrollInf.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(scrollInf)
        scrollInf.fMask = &H10 Or &H1 Or &H2 'SIF_RANGE = &H1, SIF_PAGE= &H2, SIF_TRACKPOS = &H10
        GetScrollInfo(control.Handle, 1, scrollInf)
    End Sub

    ' IsAtBottom
    Public Shared Function IsAtBottom(control As Control) As Boolean
        Get_ScrollInfo(control)
        Return scrollInf.max = (scrollInf.nTrackPos + scrollInf.nPage) - 1
    End Function

    ' IsAtTop
    Public Shared Function IsAtTop(control As Control) As Boolean
        Get_ScrollInfo(control)
        Return scrollInf.nTrackPos = 0
    End Function

    ' ReachedBottom
    Public Shared Function ReachedBottom(control As Control) As Boolean
        Get_ScrollInfo(control)
        Return scrollInf.max = scrollInf.nTrackPos + scrollInf.nPage
    End Function

    ' ReachedTop
    Public Shared Function ReachedTop(control As Control) As Boolean
        Get_ScrollInfo(control)
        Return scrollInf.nTrackPos < 0
    End Function

End Class

#End Region
person ElektroStudios    schedule 20.10.2013

Добавьте к себе следующий код

RichTextBox1.HideSelection = False
person user3827507    schedule 16.06.2015
comment
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением - вы всегда можете комментировать свои собственные сообщения, и как только у вас будет достаточно репутации, вы сможете комментировать любое сообщение. - person bytecode77; 16.06.2015
comment
Меня устраивает. Новая информация добавляется внизу и остается в фокусе - person user3827507; 16.06.2015

Когда вы устанавливаете для свойства RichTextBox «Скрыть выделение» значение False в конструкторе, И используйте «AppendText» , RichTextBox будет автоматически прокручиваться до нижней строки при добавлении.

rtblog. AppendText (dbcon.insertdata & Chr (13))

person Andrea Savojardo    schedule 06.08.2015