我需要在富文本框中循环选定文本的每个字符,并将字体方面(系列,大小或样式)应用于每个字符。使用字体对话框选择此方面。我不想在此代码中引入任何其他类型的对话框(例如颜色对话框)。
到目前为止,我暂时得到以下可能是错误的:
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...
答案 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区域中双击的任何字符串....