shaileshshinde Ответов: 2

Перейти к следующей & задней строке в richtextbox с помощью нажатия кнопки


Я хочу, чтобы поведение было таким, что когда я нажимаю на кнопку click on, курсор должен перейти к следующей & задней строке в richtextbox.

Что я уже пробовал:

Предположим, что линия есть:
Линия 1: раздел
Строка 2 : 1234567

Предположим, курсор находится на строке "abcdefgh", и когда я нажимаю на кнопку "следующая строка", то курсор должен перейти к следующей строке "1234567", а когда курсор находится на строке "1234567", и когда я нажимаю на кнопку с именем "задняя строка", то курсор должен перейти к строке "abcdefgh"


Имеется " N " количество строк в richtextbox элемент.

2 Ответов

Рейтинг:
9

Maciej Los

Если вы хотите использовать кнопки, вы немного в беде...

Во-первых, когда вы нажимаете кнопку, элемент управления RichTextBox теряет фокус, поэтому вы не можете прочитать выбранную в данный момент строку... Единственный способ обойти это-сохранить детали выбора внутри Контроль.Событие LostFocus (System.Окна.Формы) | Microsoft Docs[^]

Public Class Form1

    Dim currentline As Integer = 0

    Public Enum Direction
        Up = -1
        Down = 1
    End Enum

    Private Sub BtnUp_Click(sender As Object, e As EventArgs) Handles BtnUp.Click
        SelectLine(Direction.Up)
    End Sub

    Private Sub BtnDown_Click(sender As Object, e As EventArgs) Handles BtnDown.Click
        SelectLine(Direction.Down)
    End Sub

    Private Sub SelectLine(direction As Direction)

        Dim lineindex As Integer = currentline + direction
        If lineindex < 0 Then
            'this is the first line! 
            Exit Sub
        End If

        If lineindex > RichTextBox1.Lines.Count - 1 Then
            'this is the last line! 
            Exit Sub
        End If

        Dim searchedtext = RichTextBox1.Lines(lineindex)
        Dim indexofText As Integer = RichTextBox1.Find(searchedtext, RichTextBoxFinds.MatchCase)
        RichTextBox1.Select(indexofText, searchedtext.Length)
        RichTextBox1.Focus()

    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim lines As String() = {"ABCDE", "123456", "EFGHI", "78910"}
        Me.RichTextBox1.Lines = lines
        Me.ActiveControl = RichTextBox1
    End Sub

    Private Sub RichTextBox1_SelectionChanged(sender As Object, e As EventArgs) Handles RichTextBox1.SelectionChanged
        Dim fci As Integer = RichTextBox1.GetFirstCharIndexOfCurrentLine()
        currentline = RichTextBox1.GetLineFromCharIndex(fci)
        Dim s As String = String.Format("Current line: {0}", currentline)
        Me.Text = s
        Me.BtnUp.Enabled = currentline >= 0
        Me.BtnDown.Enabled = currentline < RichTextBox1.Lines.Count
    End Sub
End Class


Примечание: приведенный выше код был протестирован. Работать отлично.
Вы можете получить полный код от мой сервер (доступно между: 7 утра-11 вечера CET+1).

Удачи вам!


shaileshshinde

@Maciej этот код не работает, так как при нажатии кнопки richtextbox теряет фокус.

не могли бы вы помочь мне с работоспособным кодом? пожалуйста

Maciej Los

Проверьте обновленный ответ.

shaileshshinde

@maciej "BtnUp" работает, но отображаются только "ABCDE", "123456", а другие строки не попадают.при нажатии на кнопку "BtnUp"

"BtnDown" вообще не работает.

Maciej Los

Ты ошибаешься. Как я уже упоминал, он отлично работает, потому что я его протестировал. Вы можете получить полный код от мой сервер (доступно между: 7 утра-11 вечера CET+1).

shaileshshinde

@Maciej спасибо, что ваш код работает.

Maciej Los

Всегда пожалуйста.
Ваше здоровье!
Мацей

Кстати: если мой ответ был полезен, пожалуйста, проголосуйте за него!

shaileshshinde

@Maciej проголосовал за 5 звезд

Maciej Los

Спасибо!

shaileshshinde

@Maciej как мы можем показать каждую строку в разных richtextbox?

означает, что при нажатии кнопки "стрелка вниз" после строки № 1 richtextbox, то строка № 2 должна быть показана в другом richtextbox. и когда "стрелка вверх" подходящая индексная линия должна быть показана в соответствии с указателем курсора линии нет.

Имеется " N " количество строк в richtextbox элемент.

Maciej Los

В методе SelectLine добавьте эту строку в конце:

OtherControl.Text = searchedtext

shaileshshinde

теперь у меня есть одна проблема после получения строки за строкой в новом richtextbox-это сохранить файл.

текущая строка, показанная в новом richtextbox, только сохраняется.

но мне нужно, чтобы все отредактированные строки текстового файла были сохранены в одном файле в соответствии с порядком их отображения в новом richtextbox.

есть ли для этого какой-нибудь способ?

shaileshshinde

это дает ошибку, так как "othercontrol" не объявлен .

Maciej Los

"OtherControl" - это псевдоним TextBox, RichtextBox и т. д. Вы должны заменить его настоящим именем.

shaileshshinde

означает ли это отдельный инструмент в toolbox или нужно переименовать richtextbox2 как "othercontrol" ?

Maciej Los

richtextbox2.Text = searchedtext
или
текстовое поле textbox1.Текст = searchedtext
или
этикетка 1.Text = searchedtext

и т.д.

shaileshshinde

@Maciej если я использую richtextbox2.textbox=searchedtext, то одна строка отображается при btnup или btndown. спасибо за это

но мне нужно, чтобы каждая строка отображалась в разных richtextboxes

Maciej Los

Итак, вы должны перебирать строки в RichtextBox. Попробуйте что-нибудь вроде этого:

For i As Integer =0 To RichTextBox1.Lines.Count-1
    Dim rtb As RichTextBox = DirectCast(Me.Controls(String.Format("RichTextBox", i+2)), RichTextBox)
    rtb.Text = RichTextBox1.Lines(i)
Next i

Примечание: richtextboxes должны быть названы: RichTextBox1, RichTextBox2, ... RichTextBoxN

shaileshshinde

@Maciej будет ли приведенный выше код создавать динамические richtextboxes или мне нужно добавить richtextboxes?

мне нужны динамические richtextboxes

Maciej Los

Это зависит от вас. Вы можете создавать richtexboxes динамически (с помощью кода) или вручную.

shaileshshinde

не могли бы вы обновить рабочий код с помощью этого динамического richtextbox и показать все строки в разных richtextbox.

это будет большим подспорьем yours.as это последний вопрос для меня в моей работе.

Maciej Los

Извини, но это твоя работа. Вы должны попытаться изменить код в соответствии с вашими потребностями. Иначе вы ничему не научитесь.

shaileshshinde

@Мачей я не получаю какие-либо идеи, чтобы реализовать эту логику.вы можете вмешаться

Рейтинг:
1

Richard MacCutchan

Это еще одна проблема, почти такая же, как и ваши предыдущие. Вам просто нужно использовать содержимое вашего текста, чтобы вычислить новую позицию курсора. Однако вам может понравиться думать о том, чего вы пытаетесь достичь в целом. Точка текстового поля обычно предназначена для ввода информации пользователем, перемещения точки вставки, выделения текста и т. д.


shaileshshinde

Не могли бы вы, пожалуйста, помочь мне с кодом Бадди, так как я запутался в этом вопросе.

Maciej Los

Коротко И По Существу!