Návod: Serializace kolekcí standardních typů
Vlastní ovládací prvky někdy zpřístupňují kolekci jako vlastnost. Tento návod ukazuje, jak použít třídu DesignerSerializationVisibilityAttribute ke kontrole způsobu serializace kolekce v době návrhu. Použití hodnoty Content na vlastnost kolekce zajišťuje, že vlastnost bude serializována.
Opatrnost
Tento obsah byl napsán pro rozhraní .NET Framework. Pokud používáte .NET 6 nebo novější verzi, použijte tento obsah s opatrností. Systém návrháře se změnil pro Windows Forms a je důležité, abyste si prošli změny návrháře od verze .NET Framework článku.
Pokud chcete zkopírovat kód v tomto tématu jako jeden výpis, přečtěte si Postupy: Serializace kolekcí standardních typů pomocí DesignerSerializationVisibilityAttribute.
Požadavky
K dokončení tohoto návodu potřebujete Visual Studio.
Vytvoření ovládacího prvku s serializovatelnou kolekcí
Prvním krokem je vytvoření ovládacího prvku, který má serializovatelnou kolekci jako vlastnost. Obsah této kolekce můžete upravit pomocíeditoru kolekcí
V sadě Visual Studio vytvořte projekt knihovny ovládacích prvků systému Windows a pojmenujte ho SerializationDemoControlLib.
Přejmenujte
UserControl1
naSerializationDemoControl
. Další informace najdete v tématu Přejmenování refaktoringu symbolu kódu.V okně Vlastnosti nastavte hodnotu vlastnosti Padding.All na 10.
Umístěte ovládací prvek TextBox do
SerializationDemoControl
.Vyberte ovládací prvek TextBox. V okně Vlastnosti nastavte následující vlastnosti.
Vlastnost Změnit na víceřádkové true
Dock Fill posuvníky Vertical jen pro čtení true
V editoru kódu deklarujte pole typu řetězců s názvem
stringsValue
vSerializationDemoControl
.// 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
Definujte vlastnost
Strings
vSerializationDemoControl
.Poznámka
Hodnota Content slouží k povolení serializace kolekce.
// 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
Stisknutím klávesy
F5 sestavte projekt a spusťte ovládací prvek v kontejneruUserControl Test Container . Vyhledejte vlastnost Řetězce v PropertyGrid kontejneru UserControl Test container. Vyberte vlastnost Řetězce, a potom tlačítko se třemi tečkami (), abyste otevřeli editor kolekce řetězců .
Zadejte několik řetězců do editoru Kolekce řetězců . Oddělte je stisknutím klávesy Enter na konci každého řetězce. Po dokončení zadávání řetězců klikněte na OK.
Poznámka
Řetězce, které jste zadali, se zobrazí v TextBox přístroje SerializationDemoControl
.
Serializovat vlastnost kolekce
Pro testování chování serializace ovládacího prvku jej umístíte na formulář a obsah kolekce změníte pomocí Editoru kolekce. Stav serializované kolekce můžete zobrazit tak, že se podíváte na speciální soubor návrháře, do kterého Windows Forms Designer generuje kód.
Přidejte do řešení projekt aplikace systému Windows. Pojmenujte projekt
SerializationDemoControlTest
.V panelu nástrojů vyhledejte kartu s názvemSerializationDemoControlLib Components. Na této kartě najdete
SerializationDemoControl
. Další informace naleznete v tématu Návod: Automatické naplnění sady nástrojů vlastními komponentami.Umístěte
SerializationDemoControl
do formuláře.Najděte vlastnost
Strings
v okně Vlastnosti. Klikněte na vlastnostStrings
a potom klikněte na tři tečky () pro otevření editoru kolekce řetězců.Do editoru kolekce řetězců zadejte několik řetězců. Oddělte je stisknutím klávesy Enter na konci každého řetězce. Po dokončení zadávání řetězců klikněte na OK.
Poznámka
Zadané řetězce se zobrazí v TextBox,
SerializationDemoControl
.V Průzkumníku řešeníklikněte na tlačítko Zobrazit všechny soubory.
Otevřete uzel Form1. Pod ním je soubor s názvem Form1.Designer.cs nebo Form1.Designer.vb. Toto je soubor, do kterého Windows Forms Designer generuje kód představující stav návrhu formuláře a jeho podřízených ovládacích prvků. Otevřete tento soubor v editoru kódu.
Otevřete oblast s názvem kód generovaný návrhářem formulářů Windows a vyhledejte oddíl označený serializationDemoControl1. Pod tímto popiskem je kód představující serializovaný stav vašeho ovládacího prvku. Řetězce, které jste zadali v kroku 5, se zobrazí v přiřazení k vlastnosti
Strings
. Následující příklady kódu v jazyce C# a Visual Basic ukazují kód podobný tomu, co uvidíte, pokud jste zadali řetězce "červená", "oranžová" a "žlutá".this.serializationDemoControl1.Strings = new string[] { "red", "orange", "yellow"};
Me.serializationDemoControl1.Strings = New String() {"red", "orange", "yellow"}
V editoru kódu změňte hodnotu DesignerSerializationVisibilityAttribute vlastnosti
Strings
na Hidden.[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
Znovu sestavte řešení a zopakujte kroky 3 a 4.
Poznámka
V tomto případě Windows Forms Designer nevygeneruje přiřazení vlastnosti Strings
.
Další kroky
Jakmile víte, jak serializovat kolekci standardních typů, zvažte hlubší integraci vlastních ovládacích prvků do prostředí návrhu. Následující témata popisují, jak vylepšit integraci vlastních ovládacích prvků v době návrhu:
atributy v ovládacích prvcích Windows Forms
Přehled serializace návrháře
Návod: Vytvoření ovládacího prvku Windows Forms, který využívá funkce sady Visual Studio Design-Time
Viz také
.NET Desktop feedback