Domanda

Sto cercando di implementare un modo per persistere una raccolta in una classe di impostazioni personalizzate. Ho creato correttamente la classe Impostazioni (ereditarietà ApplicationSettingSbase) e posso salvare le proprietà utilizzando gli editori integrati su una proprietà di proprietà, ma la mia implementazione personalizzata di una griglia di proprietà per le raccolte non persistono nessuno dei valori che aggiungo. Ecco il mio codice:

Imports System.Configuration
Imports System.ComponentModel
Imports System.Drawing.Design
Imports System.ComponentModel.Design

Public Class CustomSettings
    Inherits ApplicationSettingsBase

    <UserScopedSetting()> _
    <DefaultSettingValue("White")> _
    Public Property BackgroundColor() As Color
        Get
            BackgroundColor = Me("BackgroundColor")
        End Get
        Set(ByVal value As Color)
            Me("BackgroundColor") = value
        End Set
    End Property

    <UserScopedSetting()> _
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Content)> _
    <Editor(GetType(CustomStringCollectionEditor), GetType(UITypeEditor))> _
    Public Property EmailAddresses() As Collection
        Get
            EmailAddresses = Me("EmailAddresses")
        End Get
        Set(ByVal value As Collection)
            Me("EmailAddresses") = value
        End Set
    End Property
End Class

Public Class CustomStringCollectionEditor
    Inherits CollectionEditor

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

    Protected Overrides Function CreateInstance(ByVal itemType As System.Type) As Object
        Return String.Empty
    End Function

    Protected Overrides Function CreateCollectionItemType() As System.Type
        Return GetType(String)
    End Function
End Class

Ho impostato un punto di interruzione sui metodi impostati sia per la proprietà BackgroundColor che per la proprietà Email Addresses. La proprietà di BackgroundColor funziona come dovrebbe: si rompe sull'istruzione impostata e memorizza correttamente la proprietà. Ma quando chiudo la finestra di dialogo CollectionEditor personalizzate, il metodo "Set" di email ha mai chiamato. Come posso convincere il mio editor personalizzato a salvare effettivamente la proprietà una volta che è stata modificata?

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top