2

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

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

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 更好地解释了这个问题......

4

2 回答 2

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 语法实时高亮--禁用重绘

除了逐个遍历字符之外,您还可以通过 pinvoke 执行此操作。这是 Code Project 上的一个随机项目,展示了基础知识:Richer RichTextBox (Part 1)

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

于 2013-03-02T14:04:38.977 回答
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 区域中双击的任何字符串...。

于 2013-03-02T05:39:45.097 回答