如何在富文本框中循环选定文本的每个字符

时间:2013-03-01 23:15:44

标签: vb.net

我需要在富文本框中循环选定文本的每个字符,并将字体方面(系列,大小或样式)应用于每个字符。使用字体对话框选择此方面。我不想在此代码中引入任何其他类型的对话框(例如颜色对话框)。

到目前为止,我暂时得到以下可能是错误的:

If aFontDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
    If rtb.SelectionFont IsNot Nothing Then
        rtb.SelectionFont = aFontDialog.Font
        rtb.SelectionColor = aFontDialog.Color
    Else
        For index As Integer = 0 To rtb.SelectionLength - 1
           '<<????
        Next
    End If
End If

修改

关于CodeProject的这篇文章比我能更好地解释了这个问题 www.codeproject.com...

2 个答案:

答案 0 :(得分:2)

对于丑陋方法的请求,这里是:

要选择粗体(同时保留任何斜体或下划线等):

Dim startIndex As Integer = rtb.SelectionStart
Dim textLength As Integer = rtb.SelectionLength
For i As Integer = startIndex To startIndex + textLength - 1
  rtb.Select(i, 1)
  rtb.SelectionFont = New Font(rtb.SelectionFont, _
                               rtb.SelectionFont.Style Or FontStyle.Bold)
Next
rtb.Select(startIndex, textLength)

要删除粗体,请将上面的行更改为:

rtb.SelectionFont = New Font(rtb.SelectionFont, _
                             rtb.SelectionFont.Style And Not FontStyle.Bold)

如果处理大型文档,则会出现相当大的闪烁。在这种情况下,您需要关闭控件的绘图,直到完成格式化,请参阅RichTextBox syntax highlighting in real time--Disabling the repaint

您可以通过pinvoke执行此操作,而不是逐个遍历字符。以下是代码项目中的随机项目,其中显示了基础知识:Richer RichTextBox (Part 1)

我不相信WPF RichTextBox有这些限制,如果可能的话,这将是另一个选择。

答案 1 :(得分:0)

此处双击富文本框区域中的字符串...

 Private Sub rtb_DoubleClick(sender As Object, e As System.EventArgs) Handles rtb.DoubleClick
    If ColorDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        If rtb.SelectionFont IsNot Nothing Then
           rtb.SelectionColor = ColorDialog1.color
        End If
    End If

    If FontDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
        rtb.SelectionFont = FontDialog1.Font
    End If
  End Sub

这会将颜色和文本样式应用于您在richtextbox区域中双击的任何字符串....