0

我正在 VS2013 中开发一个 VB.NET 4.5 项目。

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

我根据这个问题整理了一些代码。

Private Sub ToggleBold()

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

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

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

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

(我知道我提到了切换粗体,但我稍后会设置切换部分,现在我只是想让所有实例的粗体正常工作......)

4

1 回答 1

3

只需为其添加一个循环并使用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 告诉我处理字体。

于 2017-03-02T17:34:55.870 回答