Рейтинг:
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 звезд
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
@Мачей я не получаю какие-либо идеи, чтобы реализовать эту логику.вы можете вмешаться