Изменить стиль шрифта для всех экземпляров строки в RichTextBox
Я работаю над проектом VB.NET 4.5 в VS2013.
У меня есть richtextbox в форме, и когда нажимается кнопка, мне нужно переключить настройку BOLD для всех экземпляров определенной строки, найденной в richtextbox.
Я собрал код на основе этого вопроса.
Private Sub ToggleBold()
rtxtOutputText.SelectionStart = rtxtOutputText.Find("@#$%", RichTextBoxFinds.None)
rtxtOutputText.SelectionFont = New Font(rtxtOutputText.Font, FontStyle.Bold)
End Sub
Однако при нажатии кнопки переключения жирным шрифтом она выделяет только первый экземпляр строки "@#$%".
Как я могу установить все экземпляры строки жирным шрифтом? Также может быть несколько из них, связанных друг с другом ("@#$%@#$%@#$%"), поэтому каждый из них также должен быть выделен жирным шрифтом.
(Я знаю, что упоминал переключение жирным шрифтом, но я настрою часть переключения позже, сейчас я просто пытаюсь заставить жирный шрифт на всех экземплярах работать правильно...)
1 ответ
Просто добавьте цикл и используйте RichTextBox.Find(String, Int32, RichTextBoxFinds)
перегрузка, чтобы указать, с чего начать искать. Посмотрите из текущего индекса + 1, чтобы он не возвращался снова.
Вы также должны выбрать слово, чтобы убедиться, что жирный шрифт применяется только к текущему экземпляру, а не к тексту вокруг него.
Private Sub ToggleBold()
'Stop the control from redrawing itself while we process it.
rtxtOutputText.SuspendLayout()
Dim LookFor As String = "@#$%"
Dim PreviousPosition As Integer = rtxtOutputText.SelectionStart
Dim PreviousSelection As Integer = rtxtOutputText.SelectionLength
Dim SelectionIndex As Integer = -1
Using BoldFont As New Font(rtxtOutputText.Font, FontStyle.Bold)
While True
SelectionIndex = rtxtOutputText.Find(LookFor, SelectionIndex + 1, RichTextBoxFinds.None)
If SelectionIndex < 0 Then Exit While 'No more matches found.
rtxtOutputText.SelectionStart = SelectionIndex
rtxtOutputText.SelectionLength = LookFor.Length
rtxtOutputText.SelectionFont = BoldFont
End While
End Using
'Allow the control to redraw itself again.
rtxtOutputText.ResumeLayout()
'Restore the previous selection.
rtxtOutputText.SelectionStart = PreviousPosition
rtxtOutputText.SelectionLength = PreviousSelection
End Sub
Благодарим Plutonix за указание избавиться от шрифта.