- 締切済み
リッチテキストの SelectionFont プロパティ(VB.NET)
リッチテキストで選択された範囲を太字や斜体等に変換させたく RichTextBox1.SelectionFont = _ New Font(RichTextBox1.SelectionFont, RichTextBox1.SelectionFont.Style Or FontStyle.Bold) このようにした場合、選択文字に複数のフォント?が含まれてると System.NullReferenceException はハンドルされませんでした。 オブジェクト参照がオブジェクト インスタンスに設定されていません。 となってしまいます。 SelectionFont プロパティが Nothing を返してくるようで… 仕方なく以下のようにして1文字づつ変換しているのですが With RichTextBox1 For i As Integer = .SelectionStart To .SelectionStart + .SelectionLength - 1 .SelectionStart = i .SelectionLength = 1 .SelectionFont = New Font(.SelectionFont, .SelectionFont.Style Or FontStyle.Bold) Next End With 他にうまく変換させる方法はないでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
そうですねFontFamilyを指定しないといけないみたいなので それが省略(New Font(FontStyle.Bold)のように)出来ないのなら 1文字ずつ変換するか、複数のフォントを指定した時に フォント別に選択した文字位置を記憶しておいて フォントを変更する時にその文字位置データを使って変更するしか ないかな(分かり難い表現ですみません)。
すみませんがMicrosoftのMSDNサイトで調べただけで 試していませんが下記コードを試してみて下さい RichTextBox1.SelectionFont = New Font( _ CurrentFont.FontFamily, _ CurrentFont.Size, FontStyle.Bold) 参考URL http://msdn.microsoft.com/library/ja/?url=/library/ja/cpref/html/frlrfSystemWindowsFormsRichTextBoxClassTextTopic.asp 選択テキストに複数のフォントが指定されていると Null参照になるのでCurrentFontを指定するのかな。
補足
ありがとうございます。 参考 URL 以前に見た記憶が・・・ こちらの使用例を見ますと If Not richTextBox1.SelectionFont Is Nothing Then としっかり書いてあり、Nothing が返ってきた場合は処理しないようにしてあります。 SelectionFont が Nothing を返してくる以上、無理なんでしょうかね…