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構文を参照してください-再描画の無効化。

文字を1つずつ繰り返す代わりに、pinvokeを使用してこれを行うこともできます。これが基本を示すCodeProjectのランダムプロジェクトです:Richer RichTextBox(パート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

これにより、リッチテキストボックス領域でダブルクリックした文字列に色とテキストスタイルが適用されます。

于 2013-03-02T05:39:45.097 に答える