在RichTextBox中更改字符串的所有实例上的字体样式

时间:2017-03-02 17:01:01

标签: vb.net richtextbox font-style

我正在使用VS2013中的VB.NET 4.5项目。

我在表单上有一个richtextbox,当单击一个按钮时,我需要在richtextbox中找到的特定字符串的所有实例上切换BOLD设置。

我根据this question汇总了一些代码。

Private Sub ToggleBold()

    rtxtOutputText.SelectionStart = rtxtOutputText.Find("@#$%", RichTextBoxFinds.None)

    rtxtOutputText.SelectionFont = New Font(rtxtOutputText.Font, FontStyle.Bold)
End Sub

但是,当单击切换粗体按钮时,它只会粗体显示字符串的第一个实例" @#$%"。

如何将字符串的所有实例设置为粗体?也可能有几个串在一起(" @#$%@#$%@#$%"),所以每个都需要加粗。

(我知道我提到了切换粗体,但我稍后会设置切换部分,现在我只是试图让所有实例都正确运行。 ..)

1 个答案:

答案 0 :(得分:3)

只需为其添加一个循环,然后使用RichTextBox.Find(String, Int32, RichTextBoxFinds) overload指定从哪里开始查找。从当前索引+ 1开始查看,以便它不会再次返回相同的内容。

你也应该选择这个词,这样你就可以确定粗体适用于当前实例而不是它周围的文字。< / p>

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告诉我处理该字体。