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

RichTextBoxのフォント設定を保存したい

環境/言語:[XP, VB.NET]
分類:[.NET]

タグ挿入型HTMLエディタを作成しています。
タグ編集用にRichTextBoxコントロールを利用し、ユーザーがフォント、背景色を変更できるようにしたのですが、
その設定をレジストリ等に保存し、次回起動時に復元させる方法がわかりません。
ネットでも調べたのですがよくわかりません。
よろしくお願いします。
使えるかどうかわかりませんが、ぱっと浮かんだのが、こちらのHPで紹介されている、こんなのです。

外部ファイルにコントロールのプロパティを格納する
http://dobon.net/vb/dotnet/programing/dynamicproperties.html

Visual Studioでアプリケーションの設定を保存する(2005以降)
http://dobon.net/vb/dotnet/programing/mysettings.html

これで出せないなら、似たような機能を実装する事になりますが、
何処に保存するにしても、自分で、フォント、背景色を
どういった形で保存するかは、考えなければならないと思います。

たとえばフォントであれば、フォント名として保存するとか。
色であれば、RGBで保存するとか。

という感じですが、いまいち、何処で詰まっているのかがわからないので、
漠然とした回答になっています。

もしかして、レジストリへの書込みで悩んでおられますか?
ありがとうございます。
説明が足りなかったようです。すみません。

レジストリの書き込み方法はわかっているのですが、
フォントをフォント名、サイズ等に分けて保存したところ、
NameプロパティがReadOnlyなので、次回起動時に読み込めないのです。
■No21835に返信(のなさんさんの記事)
> ありがとうございます。
> 説明が足りなかったようです。すみません。
>
> レジストリの書き込み方法はわかっているのですが、
> フォントをフォント名、サイズ等に分けて保存したところ、
> NameプロパティがReadOnlyなので、次回起動時に読み込めないのです。
>

ヒント:Fontクラス
> フォントをフォント名、サイズ等に分けて保存したところ、
> NameプロパティがReadOnlyなので、次回起動時に読み込めないのです。

このNameプロパティというのは、もしかして、こういう事をやろうとしてますか?
this.richTextBox1.Font.Name = "フォント名";

だとしたら、設定方法をこう変えてみて下さい。

Font fnt = new Font("MS ゴシック", 10);
this.richTextBox1.Font = fnt;
this.richTextBox1.LanguageOption = this.richTextBox1.LanguageOption & ~RichTextBoxLanguageOptions.DualFont;

参考になりそうな物
http://dobon.net/vb/bbs/log3-8/4919.html
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=1198037&SiteID=7
助かりました。
そういう設定の仕方があるんですね、知りませんでした。
これで何とかなりそうです。

ありがとうございました。
解決済み!
# 既に解決済みのようですが:

■No21829に返信(のなさんさんの記事)
> ユーザーがフォント、背景色を変更できるようにしたのですが、
> その設定をレジストリ等に保存し、次回起動時に復元させる方法がわかりません。

フォントを文字列として保存/復元したい場合には、
FontConverter クラスを使うのが一般的かと思います。

一方、色を文字列として保存/復元するためには、
ColorConverter クラスが同様に用意されています。
(システムカラーなどは、RGB 値として保存してはマズイですよね)
2008/04/15(Tue) 13:03:14 編集(投稿者)
2008/04/15(Tue) 11:34:54 編集(投稿者)

> フォントを文字列として保存/復元したい場合には、
> FontConverter クラスを使うのが一般的かと思います。
>
> 一方、色を文字列として保存/復元するためには、
> ColorConverter クラスが同様に用意されています。
> (システムカラーなどは、RGB 値として保存してはマズイですよね)

確かに、FontConverter使ってシリアライズして保存する方が楽です。
ただ、なにやら、レジストリへの保存で、保存までは出来ているようなので、
そこらへんをなるべく変更しないで使えるような形で説明してみました。

もし見てて、興味がわいたら、こんな事を質問者さんは、してみて下さい。

FontConverter fc = new FontConverter();
string hoge = fc.ConvertToString(Fontクラス);

hogeの中身に色々入っています。

こいつを元に戻すときは、ConvertFromStringを使う。詳しくは、以下のURLで。
http://msdn2.microsoft.com/ja-jp/library/system.drawing.fontconverter_members(VS.80).aspx

カラーについても、魔界の仮面弁士さんがおっしゃっている事がスマートです。

Color構造体から、じかにColorを落とし込むなら、
http://msdn2.microsoft.com/ja-jp/library/system.drawing.color_members(VS.80).aspx
上のHPのFromArgbメソッドとToArgbメソッドを確認してみると、幸せになれるかも。
> (システムカラーなどは、RGB 値として保存してはマズイですよね)
おっしゃるとおりであります、Aが抜けてるorz

以上 余談でした。
もう見てないかなぁ〜

追記
システムカラーうんぬんは、Aが入る入らないじゃないorz
とりあえず、システムカラーなどは、保存していないであろうと思っておきたい(ノ_・、)シクシク
普通にテキストのバックカラーなどは、Color構造体でもOKだと思いたいorz

さらに追記
解決済みチェック?
元々チェック入ってたんですよね?
すいませんorz
解決済み!

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