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

RichTextBoxのFONT設定について

環境/言語:[WindowsXP, VB2005]
分類:[.NET]

お世話になります。

RichTextBoxに、通常使われないような特殊な漢字含んだ文字列をRichTextBox1.Text = "特殊な漢字を含む文字列"という具合に挿入するとFONTが自動的に何かに変わってしまうようなのですが、これはどうしようもないことなのでしょうか?(特にひらがなや数字が何かのフォントに変わってしまいます。)

(※特殊な漢字の例:中国で使われているような複雑な漢字で、偶然のにんべんが、骨へんになった漢字など)

ちなみにRichTextBoxにIMEの手書き機能を利用して直接書き込む場合は、漢字も含めてひらがなも数字もFONTが変わることなく表示しています。


わかりにくい説明だとは思いますが、どなたか解決方法を知っていたら教えていただけないでしょうか。

宜しくお願いいたします。
どの漢字でどのフォントですか?
私は、MS ゴシックで
richTextbox1.text = "骸骨骸骨あいうえお1234567890";
としても変わりは見られませんでした。
# Windowsアプリですが。
> どの漢字でどのフォントですか?
> 私は、MS ゴシックで
> richTextbox1.text = "骸骨骸骨あいうえお1234567890";
> としても変わりは見られませんでした。

"偶然のにんべんが、骨へんになった漢字[グ(ゴウ)]"のような
漢字を含む文字列、ということですよね。
実際に私も試してみましたが、確かにsakoさんの仰っている現象を
確認することが出来ました。

ちなみに実験したフォントは、"MS UI Gothic"と"MS ゴシック"です。

RichTextBox1.Text = "ああ[グ(ゴウ)]AAA"

をコード上で指定した場合、RichTextBox1には明らかに
プロパティで設定されているフォントではないフォントで
文字列が表示されていました。

しかし、この時のRichTextBox1.Font.Nameの戻り値は
プロパティで設定されているフォント名になっていました。

内部で文字列を指定した場合のみこのような事象が起きています。

ペースト時、IME手書き機能からの入力時、RichTextBox1への直接入力時は、
問題なくプロパティで設定されているフォントで表示されています。

RichTextBox1.Text = "ああ【グ(ゴウ)】AAA"

上記記述の後に

Me.RichTextBox1.Font = New Font(フォント名, _
                フォントサイズ, _
                フォントスタイル)

の記述を加えても駄目なんでしょうか??
2008/08/08(Fri) 15:16:58 編集(投稿者)
2008/08/08(Fri) 15:13:33 編集(投稿者)

■No22627に返信(もょもとさんの記事)
>"偶然のにんべんが、骨へんになった漢字[グ(ゴウ)]"のような
>漢字を含む文字列、ということですよね。

「骨 + (偶 − イ)」ですか。
失礼しました。私の頭には「骨へんの漢字」しかなかったです…。

文字化けするので、「骨 + (偶 − イ)」を@に例えると
"@@あいうえお0123456"で試すと実現できました。
#なんじゃこりゃぁ(^^;

>Me.RichTextBox1.Font = New Font(フォント名, _
>                フォントサイズ, _
>                フォントスタイル)

これでもビクともしませんし、

Font fnt = new Font("MS UI Gothic",
richTextBox1.SelectionFont.Size,
richTextBox1.SelectionFont.Style);
richTextBox1.SelectionFont = fnt;
richTextBox1.SelectedText = @@あいうえお0123456";

でもビクともしませんね。

Font取得しても、そのまま変わらずだし。
RichTextBoxのバグかなぁ。
2008/08/08(Fri) 15:20:48 編集(投稿者)
2008/08/08(Fri) 15:20:43 編集(投稿者)
返事が遅れて申し訳ありません。
もょもとさん、アッシさん、試していただきありがとうございます。

やはり、皆さんのところでも同様の表示になりますか。
私もプログラム的に指定してみたりしたのですが、上手くいきませんでした。
ということは、アッシさんのいう通り、RichTextBoxのバグなのでしょうか。。。

他にどなたか対処方法を知っている方がいましたら、ご助言宜しくお願いします。
もう少し、この質問をあけておこうと思います。

宜しくお願いいたします。


■No22629に返信(アッシさんの記事)
> 2008/08/08(Fri) 15:13:33 編集(投稿者)
>
> ■No22627に返信(もょもとさんの記事)
> >"偶然のにんべんが、骨へんになった漢字[グ(ゴウ)]"のような
> >漢字を含む文字列、ということですよね。
>
> 「髃」ですか。
> 失礼しました。私の頭には「骨へんの漢字」しかなかったです…。
>
> "髃髃あいうえお0123456"で試すと実現できました。
> #なんじゃこりゃぁ(^^;
>
> >Me.RichTextBox1.Font = New Font(フォント名, _
> >                フォントサイズ, _
> >                フォントスタイル)
>
> これでもビクともしませんし、
>
> Font fnt = new Font("MS UI Gothic",
> richTextBox1.SelectionFont.Size,
> richTextBox1.SelectionFont.Style);
> richTextBox1.SelectionFont = fnt;
> richTextBox1.SelectedText = "髃髃あいうえお0123456";
>
> でもビクともしませんね。
>
> Font取得しても、そのまま変わらずだし。
> RichTextBoxのバグかなぁ。
気になる情報を…。
私はWindows Live Messengerを使用してるんですが、
ひょっとしてと思って、
例の文字を打つと、なんと同様な現象が発生しました。

どうやら作りの問題ではなさそうです。
端末によるものなのか、バグかは不明ですが…。
RichTextBox(というか RichEdit)の仕様です。
WORD だと補正してくれるようですが、WordPad だと中文用フォントになるはずです。
// Clipboard.SetText(ChrW(&H9AC3) & "あ") を実行してペーストしてみてください。
試した限り、LanguageOption に、AutoFont を消して AutoFontSizeAdjust 追加すれば日本語は日本語用フォントで表示されるようになるみたいです。
// LanguageOption の既定値は AutoFontSizeAdjust って書いてるけど、どうもAutoFont Or DualFont になってるっぽい。
ただし私はこの辺詳しくないので何らかの副作用があるかもしれません。多分大丈夫だと思いますが。
他に消極的な方法としては、AppendText で日本語の字と非日本語の字を別々に追加していくことでも対応可能かと思います(でもペーストには対応できない)。
■No22634に返信(Hongliangさんの記事)
> RichTextBox(というか RichEdit)の仕様です。
> WORD だと補正してくれるようですが、WordPad だと中文用フォントになるはずです。

なんと、中文用フォントになってたんですか。

同様の現象になるのかどうかは分かりませんが、
回避方法は同じものが見つかりました。
ご参考までに。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=35889&forum=7
返事が遅れもうしわけありません。
Hongliang ファミリーさん、アッシさん、情報をありがとうございます。
いただいた情報を元に試してみたいと思います。

ありがとうございました。
追伸
Hongliang ファミリーさんからいただいた方法で対応できました。
本当に助かりました。
ありがとうございました。
これにてこの質問をクローズさせていただきます。

感謝。
解決済み!
まったくもってどうでもいい話なんですが、“ファミリー”てのは sako さんのお名前の後ろについてる“一般人”と同じく投稿数に応じて勝手に付けられるものなので、私のハンドルは“Hongliang”だけです。
// 別に気を悪くするとか言う話ではない、ちょっとしたトリビアです。
解決済み!
2008/08/13(Wed) 10:30:42 編集(投稿者)

あぁ、そうだったんですね。ファミリーは余分でしたか。(全く気がついていませんでした。)
申し訳ありませんでした。

後日談ですが、
教えていただいた方法ですと、一部問題があることも分かりました。
RichTextBoxに設定しておいても、最初の読込み時には、画面上に表示していなければ
フォントは中文フォントになるようです。

  RichTextBox1.LanguageOption = RichTextBoxLanguageOptions.AutoFontSizeAdjust

例:タブをいくつか用意しておいて、タブ2にリッチテキストボックスが用意しておきます。タブ1を初期表示とした場合、タブ2に値を内部的に設定しておいて、いざタブ2をクリックして画面上に表示されてもフォントはおかしいままでした。


なかなか前途多難ではありますが、皆さんのご助言ありがとうございました。
もう少し対応方法を検討してみたいと思います。
いくつかパターンを試してみましたが、一度でも画面上に
RichTextBoxを表示させる事ができれば解消できるようです。
(私の作成中の仕組みでは裏方でいくつもRichTextBoxが立ち上がるため、
根本的な解決にはなっていませんが、経過として書かせていただきました。)

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