DOBON.NET DOBON.NETプログラミング掲示板過去ログ

RichTextBox内のフォント変更について

環境/言語:[OS : Windows XP Home Edition / 言語 : Visual Basic .NET / .NET Framework : 1.1]
分類:[.NET]

RichTextBox内に短い文を書き
選択された部分のフォントをButtonによって太字、斜体等に変える
またはウィザードによって色や文字フォントを変える
というものを組んだのですが
何種類かテストしてみたところ

2バイト文字と半角英字を組み合わせて変換をしようとするとエラーが出てしまうようです。
また、2バイト文字と半角数字の組み合わせでもエラーが出ることがありました。

例:あa ×
  あ1 △
  ああ ○
  aa  ○

Buttonを押したときのコードは
If RichTextBox1.SelectionFont.Bold = False Then
RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Bold)
Else
RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Regular)
End If
このように記述していて、他のものはBoldの部分をItalic等に変えています。

そこで、質問なのですがRichTextBox内のフォントを変更する際にはどのようなコーディングをすればエラーが出ることがなく変更できるのでしょうか

記入の足りない部分などがありましたらご指摘いただければ追記させていただきますので
よろしくお願いします
> If RichTextBox1.SelectionFont.Bold = False Then
SelectionFont プロパティは、Nothing を返す可能性がありますが、
それについては考慮されていますか?

> 2バイト文字と半角英字を組み合わせて変換をしようとするとエラーが出てしまうようです。
どのようなエラーでしょうか?
早速のご回答ありがとうございます。

> SelectionFont プロパティは、Nothing を返す可能性がありますが、
> それについては考慮されていますか?

まったく考慮していませんでした。
調べてみたところ選択範囲に複数のフォントがある場合にNothingが返ってくるというのはわかったのですが
具体的にどのように対処したらよいのでしょうか

>>2バイト文字と半角英字を組み合わせて変換をしようとするとエラーが出てしまうようです。
> どのようなエラーでしょうか?

'System.NullReferenceException' のハンドルされていない例外が Test.exe で発生しました。

追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。

というエラーが出ました。
■No15670に返信(vovさんの記事)
> まったく考慮していませんでした。
> 調べてみたところ選択範囲に複数のフォントがある場合にNothingが返ってくるというのはわかったのですが
> 具体的にどのように対処したらよいのでしょうか

If obj Is Nothing Then
  '/ Nothing である
End If

> 'System.NullReferenceException' のハンドルされていない例外が Test.exe で発生しました。

弁さんの推測どおりですね。
上記コードで対策すれば解決します。

.............................................................................................................................
じゃんぬ @ わんくま同盟, Microsoft MVP for Visual Developer - C#
http://jeanne.wankuma.com/
http://blogs.wankuma.com/jeanne/
ご回答ありがとうございます。
また、返信が遅れてしまい申し訳ありませんでした。
■No15671に返信(じゃんぬねっとさんの記事)

> If obj Is Nothing Then
>   '/ Nothing である
> End If

早速参考にさせていただき
If RichTextBox1.SelectionFont Is Nothing Then
Exit Sub
End If
としてエラーは回避することが出来たのですが
その部分のフォントをいじることは出来ないのでしょうか?

If RichTextBox1.SelectionFont Is Nothing Then
RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Bold)
Exit Sub
End If
If RichTextBox1.SelectionFont.Bold = False Then
RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Bold)
Else
RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Regular)
End If
としたところ

RichTextBox1.SelectionFont = New Font(RichTextBox1.SelectionFont, FontStyle.Bold)
が選択された状態で
'System.NullReferenceException' のハンドルされていない例外が system.drawing.dll で発生しました。

追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。
といったエラーが出ました。

一度Labelに選択した部分を写して太字にしてRichTextBoxに戻せばいいかな?
と思って組んでみても思うように太字になってくれませんでした。
何かいい方法はありませんでしょうか

DOBON.NET | プログラミング道 | プログラミング掲示板