Share via


Návod: Serializace kolekcí standardních typů

Vlastní ovládací prvky někdy zpřístupňují kolekci jako vlastnost. Tento návod ukazuje, jak pomocí DesignerSerializationVisibilityAttribute třídy řídit, jak je kolekce serializována v době návrhu. Použití Content hodnoty na vlastnost kolekce zajišťuje, že vlastnost bude serializována.

Upozornění

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 model Windows Forms a je důležité, abyste si prošli změny Návrháře od článku .NET Framework.

Pokud chcete zkopírovat kód v tomto tématu jako jeden výpis, viz Postupy: Serializace kolekcí standardních typů pomocí DesignerSerializationVisibilityAttribute.

Předpoklady

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í, ke kterému máte přístup z okna Vlastnosti .

  1. V sadě Visual Studio vytvořte projekt knihovny ovládacích prvků systému Windows a pojmenujte jej SerializationDemoControlLib.

  2. Přejmenujte UserControl1 na SerializationDemoControl. Další informace naleznete v tématu Přejmenování refaktoringu symbolu kódu.

  3. V okně Vlastnosti nastavte hodnotu Padding.All vlastnosti na 10.

  4. TextBox Umístěte ovládací prvek do SerializationDemoControlovládacího prvku .

  5. TextBox Vyberte ovládací prvek. V okně Vlastnosti nastavte následující vlastnosti.

    Vlastnost Změňte na
    Víceřádkové true
    Dock Fill
    Posuvníky Vertical
    ReadOnly true
  6. V Editoru kódu deklarujte pole řetězce pojmenované stringsValue v 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. Strings Definujte vlastnost v objektu SerializationDemoControl.

    Poznámka:

    Hodnota Content se používá 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
    
  8. Stisknutím klávesy F5 sestavte projekt a spusťte ovládací prvek v kontejneru Test UserControl.

  9. Vyhledejte vlastnost Strings v PropertyGrid kontejneru UserControl Test. Vyberte vlastnost Strings a pak výběrem tlačítka se třemi tečkami (The Ellipsis button (...) in the Properties window of Visual Studio) otevřete Editor kolekcí řetězců.

  10. 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 TLAČÍTKO OK .

Poznámka:

Řetězce, které jste zadali, se zobrazí v sadě TextBoxSerializationDemoControl.

Serializace vlastnosti kolekce

Chcete-li otestovat chování serializace ovládacího prvku, umístíte ho do formuláře a změníte obsah kolekce pomocí Editoru kolekcí. Stav serializované kolekce můžete zobrazit tak, že se podíváte na speciální soubor návrháře, do kterého model Windows Forms Designer generuje kód.

  1. Přidejte do řešení projekt aplikace systému Windows. Pojmenujte projekt SerializationDemoControlTest.

  2. Na panelu nástrojů vyhledejte kartu SerializationDemoControlLib Components. Na této kartě najdete tlačítko SerializationDemoControl. Další informace naleznete v tématu Návod: Automatické naplnění sady nástrojů vlastními komponentami.

  3. Umístěte ho SerializationDemoControl do formuláře.

  4. Strings Najděte vlastnost v okně Vlastnosti. Strings Klikněte na vlastnost a potom kliknutím na tlačítko se třemi tečkou (The Ellipsis button (...) in the Properties window of Visual Studio.) otevřete Editor kolekcí řetězců.

  5. 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 TLAČÍTKO OK .

    Poznámka:

    Řetězce, které jste zadali, se zobrazí v sadě TextBoxSerializationDemoControl.

  6. V Průzkumník řešení klikněte na tlačítko Zobrazit všechny soubory.

  7. 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 návrhář model Windows Forms 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.

  8. Otevřete oblast s názvem Windows Form Designer vygenerovaný kód a vyhledejte oddíl serializaceDemoControl1. 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í 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"}
    
  9. V Editoru kódu změňte hodnotu vlastnosti DesignerSerializationVisibilityAttributeStrings na Hidden.

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
    
  10. Znovu sestavte řešení a zopakujte kroky 3 a 4.

Poznámka:

V tomto případě návrhář model Windows Forms nevygeneruje žádné přiřazení vlastnostiStrings.

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:

Viz také