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.
Dans Visual Studio, créez un projet de bibliothèque de contrôles Windows et nommez-le SerializationDemoControlLib.
Renommez
UserControl1
enSerializationDemoControl
. Pour plus d’informations, consultez Renommer une refactorisation des symboles de code.Dans la fenêtre Propriétés , définissez la valeur de la Padding.All propriété sur 10.
Placez un TextBox contrôle dans le
SerializationDemoControl
.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
Dans l’Éditeur de code, déclarez un champ de tableau de chaînes nommé
stringsValue
dansSerializationDemoControl
.// 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
Définissez la
Strings
propriété sur leSerializationDemoControl
.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
Appuyez sur F5 pour générer le projet et exécuter votre contrôle dans le conteneur de test UserControl.
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 () pour ouvrir l’éditeur de collection de chaînes.
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 TextBoxSerializationDemoControl
fichier .
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.
Ajoutez un projet d’application Windows à la solution. Nommez le projet
SerializationDemoControlTest
.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.Placez une
SerializationDemoControl
sur votre formulaire.Recherchez la
Strings
propriété dans la fenêtre Propriétés . Cliquez sur laStrings
propriété, puis sur le bouton de sélection () pour ouvrir l’éditeur de collection de chaînes.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 TextBox
SerializationDemoControl
fichier .Dans l’Explorateur de solutions, cliquez sur le bouton Afficher tous les fichiers.
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.
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"}
Dans l’Éditeur de code, remplacez la valeur de la DesignerSerializationVisibilityAttribute
Strings
propriété Hiddenpar .[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
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
.NET Desktop feedback