2010/10/28(Thu) 12:01:14 編集(投稿者)
■No54607 (hiro さん) に返信
> 文字化けを起こさず、リッチテキストボックスに受け入れさせる方法を調べてみることにします。
クリップボードの内容を加工する方向で考えてみました。
RichTextBox に貼り付ける直前に、下記の処理を呼び出しておくと、
今回の現象(半角数字の欠損)がおきなくなると思います。
――どのタイミングで呼び出すべきかが悩ましいところですが。
Public Sub FixRTF()
Dim baseData As IDataObject = Clipboard.GetDataObject()
If Not baseData.GetDataPresent(DataFormats.Rtf) Then
Return
End If
Dim oldRTF As String = baseData.GetData(DataFormats.Rtf).ToString()
Dim newRTF As String = System.Text.RegularExpressions.Regex.Replace( _
oldRTF, "(?<uc>\\uc\d)(?<num>\d)", "${uc}{}${num}")
If newRTF <> oldRTF Then
'Debug.Print(newRTF)
Dim cloneData As New DataObject()
For Each fmt As String In baseData.GetFormats(False)
If fmt = DataFormats.Rtf Then
cloneData.SetData(DataFormats.Rtf, newRTF)
Else
cloneData.SetData(fmt, baseData.GetData(fmt, False))
End If
Next
'Clipboard.Clear()
Clipboard.SetDataObject(cloneData, True)
End If
End Sub