ユースケース: ユーザーは、データストアにロード/保存する必要があるデザイン サーフェイス上のオブジェクトにフォントのカスタマイズを行います。つまり、太字、斜体、サイズ、フォント名などの設定は永続化する必要があります。
フォント オブジェクトの文字列表現から変換/読み取りを行うための簡単な (そして信頼できる) メカニズムはありますか (その場合、必要な属性は 1 つだけです)。または、複数のプロパティをカスタム ロジックと組み合わせるのが適切なオプションですか?
ユースケース: ユーザーは、データストアにロード/保存する必要があるデザイン サーフェイス上のオブジェクトにフォントのカスタマイズを行います。つまり、太字、斜体、サイズ、フォント名などの設定は永続化する必要があります。
フォント オブジェクトの文字列表現から変換/読み取りを行うための簡単な (そして信頼できる) メカニズムはありますか (その場合、必要な属性は 1 つだけです)。または、複数のプロパティをカスタム ロジックと組み合わせるのが適切なオプションですか?
TypeConverterを使用します:
Font font = new Font("Arial", 12, GraphicsUnit.Pixel);
TypeConverter converter = TypeDescriptor.GetConverter(typeof (Font));
string fontStr = converter.ConvertToInvariantString(font);
Font font2 = (Font) converter.ConvertFromString(fontStr);
Console.WriteLine(font.Name == font2.Name); // prints True
XMLシリアル化を使用する場合は、Fontプロパティのサブセットを格納するFontクラスラッパーを作成できます。
注(ギス)-型変換器に直接アクセスしないでください。代わりに、TypeDescriptorを使用して適切なコンバーターにアクセスしてください。非常に重要です:)
これを永続化するには、どのタイプのデータストアが必要ですか?ファイルに永続化できるのがユーザー設定だけの場合は、フォントオブジェクトをバイナリまたはxmlの設定ファイルにシリアル化できます(構成ファイルを直接編集できるようにする場合)。シリアル化名前空間(System.Xml.SerializationおよびSystem.Runtime.Serialization)は、カスタムコードを記述せずにこれを行うためのすべてのツールを提供します。
XMLシリアル化に関するMSDNサイト:.NetFrameworkでのXMLシリアル化
[編集]そのため、フォントオブジェクトはシリアル化できません。おっと、ごめんなさい。
私が取り組んでいるプロジェクトでは、複数のプロパティを使用しました。
名前、サイズ、スタイル、単位を分割してフォントをデータベース テーブルに保存し、それらの値を永続化します。
これらの値が取得されたら、必要に応じてフォントを再作成するのは簡単です。