我正在使用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
但是,当单击切换粗体按钮时,它只会粗体显示字符串的第一个实例" @#$%"。
如何将字符串的所有实例设置为粗体?也可能有几个串在一起(" @#$%@#$%@#$%"),所以每个都需要加粗。
(我知道我提到了切换粗体,但我稍后会设置切换部分,现在我只是试图让所有实例都正确运行。 ..)
答案 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告诉我处理该字体。