Procédure pas à pas : sérialiser des collections de types standard

Vos contrôles personnalisés exposent parfois une collection en tant que propriété. Cette procédure pas à pas montre comment utiliser la DesignerSerializationVisibilityAttribute classe pour contrôler la sérialisation d’une collection au moment du design. L’application de la Content valeur à votre propriété de collection garantit que la propriété sera sérialisée.

Attention

Ce contenu a été écrit pour .NET Framework. Si vous utilisez .NET 6 ou une version ultérieure, utilisez ce contenu avec prudence. Le système de concepteur a changé pour Windows Forms et il est important de passer en revue les modifications apportées au Concepteur depuis l’article .NET Framework .

Pour copier le code de cette rubrique en tant que liste unique, consultez How to : Serialize Collections of Standard Types with the DesignerSerializationVisibilityAttribute.

Prérequis

Cette procédure pas à pas nécessite Visual Studio.

Créer un contrôle avec une collection sérialisable

La première étape consiste à créer un contrôle qui a une collection sérialisable en tant que propriété. Vous pouvez modifier le contenu de cette collection à l’aide de l’Éditeur de collection, auquel vous pouvez accéder à partir de la fenêtre Propriétés.

  1. Dans Visual Studio, créez un projet de bibliothèque de contrôles Windows et nommez-le SerializationDemoControlLib.

  2. Renommez UserControl1 en SerializationDemoControl. Pour plus d’informations, consultez Renommer une refactorisation des symboles de code.

  3. Dans la fenêtre Propriétés , définissez la valeur de la Padding.All propriété sur 10.

  4. Placez un TextBox contrôle dans le SerializationDemoControl.

  5. Sélectionnez le contrôle TextBox. Dans la fenêtre Propriétés , définissez les propriétés suivantes.

    Propriété Valeur de substitution
    Multiline true
    Dock Fill
    BarreDéfilement Vertical
    Lecture seule true
  6. Dans l’Éditeur de code, déclarez un champ de tableau de chaînes nommé stringsValue dans SerializationDemoControl.

        // This field backs the Strings property.
    private:
        array<String^>^ stringsValue;
    
    
    
    // This field backs the Strings property.
    private String[] stringsValue = new String[1];
    
    ' This field backs the Strings property.
     Private stringsValue(1) As String
    
  7. Définissez la Strings propriété sur le SerializationDemoControl.

    Remarque

    La Content valeur est utilisée pour activer la sérialisation de la collection.

        // When the DesignerSerializationVisibility attribute has
        // a value of "Content" or "Visible" the designer will 
        // serialize the property. This property can also be edited 
        // at design time with a CollectionEditor.
    public:
        [DesignerSerializationVisibility(
            DesignerSerializationVisibility::Content)]
        property array<String^>^ Strings
        {
            array<String^>^ get()
            {
                return this->stringsValue;
            }
            void set(array<String^>^ value)
            {
                this->stringsValue = value;
    
                // Populate the contained TextBox with the values
                // in the stringsValue array.
                StringBuilder^ sb =
                    gcnew StringBuilder(this->stringsValue->Length);
    
                for (int i = 0; i < this->stringsValue->Length; i++)
                {
                    sb->Append(this->stringsValue[i]);
                    sb->Append(Environment::NewLine);
                }
    
                this->demoControlTextBox->Text = sb->ToString();
            }
        }
    
    // When the DesignerSerializationVisibility attribute has
    // a value of "Content" or "Visible" the designer will
    // serialize the property. This property can also be edited
    // at design time with a CollectionEditor.
    [DesignerSerializationVisibility(
        DesignerSerializationVisibility.Content )]
    public String[] Strings
    {
        get
        {
            return this.stringsValue;
        }
        set
        {
            this.stringsValue = value;
    
            // Populate the contained TextBox with the values
            // in the stringsValue array.
            StringBuilder sb =
                new StringBuilder(this.stringsValue.Length);
    
            for (int i = 0; i < this.stringsValue.Length; i++)
            {
                sb.Append(this.stringsValue[i]);
                sb.Append("\r\n");
            }
    
            this.textBox1.Text = sb.ToString();
        }
    }
    
    ' When the DesignerSerializationVisibility attribute has
    ' a value of "Content" or "Visible" the designer will 
    ' serialize the property. This property can also be edited 
    ' at design time with a CollectionEditor.
     <DesignerSerializationVisibility( _
         DesignerSerializationVisibility.Content)> _
     Public Property Strings() As String()
         Get
             Return Me.stringsValue
         End Get
         Set(ByVal value As String())
             Me.stringsValue = Value
    
             ' Populate the contained TextBox with the values
             ' in the stringsValue array.
             Dim sb As New StringBuilder(Me.stringsValue.Length)
    
             Dim i As Integer
             For i = 0 To (Me.stringsValue.Length) - 1
                 sb.Append(Me.stringsValue(i))
                 sb.Append(ControlChars.Cr + ControlChars.Lf)
             Next i
    
             Me.textBox1.Text = sb.ToString()
         End Set
     End Property
    
  8. Appuyez sur F5 pour générer le projet et exécuter votre contrôle dans le conteneur de test UserControl.

  9. Recherchez la propriété Strings dans le PropertyGridconteneur de test UserControl. Sélectionnez la propriété Strings, puis sélectionnez le bouton de sélection (The Ellipsis button (...) in the Properties window of Visual Studio) pour ouvrir l’éditeur de collection de chaînes.

  10. Entrez plusieurs chaînes dans l’éditeur de collection de chaînes. Séparez-les en appuyant sur la touche Entrée à la fin de chaque chaîne. Cliquez sur OK lorsque vous avez terminé d’entrer des chaînes.

Remarque

Les chaînes que vous avez tapées apparaissent dans le TextBoxSerializationDemoControlfichier .

Sérialiser une propriété de collection

Pour tester le comportement de sérialisation de votre contrôle, vous allez le placer sur un formulaire et modifier le contenu de la collection avec l’Éditeur de collection. Vous pouvez voir l’état de la collection sérialisée en examinant un fichier de concepteur spécial dans lequel le Concepteur Windows Forms émet du code.

  1. Ajoutez un projet d’application Windows à la solution. Nommez le projet SerializationDemoControlTest.

  2. Dans la boîte à outils, recherchez l’onglet SerializationDemoControlLib Components. Dans cet onglet, vous trouverez le SerializationDemoControl. Pour plus d’informations, consultez l’article Procédure pas à pas : remplissage automatique de la boîte à outils avec des composants personnalisés.

  3. Placez une SerializationDemoControl sur votre formulaire.

  4. Recherchez la Strings propriété dans la fenêtre Propriétés . Cliquez sur la Strings propriété, puis sur le bouton de sélection (The Ellipsis button (...) in the Properties window of Visual Studio.) pour ouvrir l’éditeur de collection de chaînes.

  5. Tapez plusieurs chaînes dans l’éditeur de collection de chaînes. Séparez-les en appuyant sur Entrée à la fin de chaque chaîne. Cliquez sur OK lorsque vous avez terminé d’entrer des chaînes.

    Remarque

    Les chaînes que vous avez tapées apparaissent dans le TextBoxSerializationDemoControlfichier .

  6. Dans l’Explorateur de solutions, cliquez sur le bouton Afficher tous les fichiers.

  7. Ouvrez le nœud Form1 . En dessous, il s’agit d’un fichier appelé Form1.Designer.cs ou Form1.Designer.vb. Il s’agit du fichier dans lequel le Concepteur Windows Forms émet du code représentant l’état au moment du design de votre formulaire et de ses contrôles enfants. Ouvrez ce fichier dans l’éditeur de code.

  8. Ouvrez la région appelée Concepteur Windows Form généré et recherchez la section intitulée serializationDemoControl1. Sous cette étiquette, le code représente l’état sérialisé de votre contrôle. Les chaînes que vous avez tapées à l’étape 5 apparaissent dans une affectation à la Strings propriété. Les exemples de code suivants en C# et Visual Basic montrent du code similaire à ce que vous verrez si vous avez tapé les chaînes « rouge », « orange » et « jaune ».

    this.serializationDemoControl1.Strings = new string[] {
            "red",
            "orange",
            "yellow"};
    
    Me.serializationDemoControl1.Strings = New String() {"red", "orange", "yellow"}
    
  9. Dans l’Éditeur de code, remplacez la valeur de la DesignerSerializationVisibilityAttributeStrings propriété Hiddenpar .

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
    
  10. Régénérez la solution et répétez les étapes 3 et 4.

Remarque

Dans ce cas, le Concepteur Windows Forms n’émet aucune affectation à la Strings propriété.

Étapes suivantes

Une fois que vous savez comment sérialiser une collection de types standard, envisagez d’intégrer vos contrôles personnalisés plus profondément dans l’environnement au moment du design. Les rubriques suivantes décrivent comment améliorer l’intégration au moment du design de vos contrôles personnalisés :

Voir aussi