0

カスタム クラスのメンバーは、My.Settings に保存されることになっている場合、クラス自体と同じ要件に従うことを認識しています。これらの要件の 1 つは、クラス (およびそのすべてのメンバー) に空のコンストラクターがあることです。ここで、いくつかのフォント設定を保存する必要があります。ドキュメントによると、フォントには空のコンストラクターがありません。論理的には、Font 型メンバーを含むクラスは My.Settings に保存できません。

これまでのところ、とても悪い。ただし、何らかの理由で、Font オブジェクトの値を My.Settings に直接保存できることに気付きました。カスタムクラスで使用しようとした System.Drawing.Font と同じであることを確認しました。

私の2つの質問は次のとおりです。

  1. これはどのように/なぜ可能ですか?

  2. Font が可能な My.Setting であることについて私が書いたことを考えると、Fontの独自の実装 [または必要なプロパティを備えたもの] を作成せずに、Font 型のメンバーを持ち、クラスを保存する方法はありますか?

これをGoogleで調べてみましたが、役に立ちませんでした。My.Settings/serialisation のドキュメントもあまり役に立ちませんでした。

編集:これが私のカスタムクラスのコードです:

<Serializable()> Public Class MyObject
Implements ISerializable

Private _name As String
Private _text As String
Private _font As Font

Public Property Name As String
    Get
        Return _name
    End Get
    Set(value As String)
        _name = value
    End Set
End Property

Public Property Text As String
    Get
        Return _text
    End Get
    Set(value As String)
        _text = value
    End Set
End Property

Public Property Font As Font
    Get
        Return _font
    End Get
    Set(value As Font)
        _font = value
    End Set
End Property

<NonSerialized()> Public Const CurrentDate As String = "something"
<NonSerialized()> Public Const DateSelection As String = "something else"
End Class

カスタム クラス オブジェクトのキー付きコレクションのコードは次のとおりです。

Imports System.Collections.ObjectModel

<Serializable()> Public Class MyCollection
Inherits KeyedCollection(Of String, MyObject)

Public Sub New()
    MyBase.New()
End Sub

Protected Overrides Function GetKeyForItem(item As MyObject) As String
    Return item.Name
End Function
End Class
4

0 に答える 0