Udostępnij za pośrednictwem


Przewodnik: serializowanie kolekcji typów standardowych

Kontrolki niestandardowe będą czasami uwidaczniać kolekcję jako właściwość. W tym przewodniku pokazano, jak używać DesignerSerializationVisibilityAttribute klasy do kontrolowania serializacji kolekcji w czasie projektowania. Content Zastosowanie wartości do właściwości kolekcji gwarantuje, że właściwość zostanie serializowana.

Uwaga

Ta zawartość została napisana dla programu .NET Framework. Jeśli używasz platformy .NET 6 lub nowszej wersji, użyj tej zawartości ostrożnie. System projektanta został zmieniony dla formularzy systemu Windows i ważne jest, aby przejrzeć zmiany Projektant od artykułu .NET Framework.

Aby skopiować kod w tym temacie jako pojedynczą listę, zobacz How to: Serialize Collections of Standard Types with the Projektant SerializationVisibilityAttribute (Instrukcje: serializowanie kolekcji typów standardowych za pomocą atrybutu Projektant SerializationVisibilityAttribute).

Wymagania wstępne

Aby ukończyć ten przewodnik, potrzebny jest program Visual Studio.

Tworzenie kontrolki z kolekcją z możliwością serializacji

Pierwszym krokiem jest utworzenie kontrolki, która ma kolekcję z możliwością serializacji jako właściwość. Zawartość tej kolekcji można edytować przy użyciu Edytora kolekcji, do którego można uzyskać dostęp w oknie Właściwości .

  1. W programie Visual Studio utwórz projekt Biblioteka kontrolek systemu Windows i nadaj mu nazwę SerializationDemoControlLib.

  2. Zmień nazwę UserControl1 na SerializationDemoControl. Aby uzyskać więcej informacji, zobacz Zmienianie nazwy refaktoryzacji symbolu kodu.

  3. W oknie Właściwości ustaw wartość Padding.All właściwości na 10.

  4. Umieść kontrolkę TextBox w elemecie SerializationDemoControl.

  5. Wybierz kontrolkę TextBox . W oknie Właściwości ustaw następujące właściwości.

    Właściwości Zmień na
    Wielowierszowego true
    Dock Fill
    Scrollbars Vertical
    ReadOnly true
  6. W Edytorze kodu zadeklaruj pole tablicy ciągów o nazwie stringsValue w SerializationDemoControlpliku .

        // 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. Zdefiniuj Strings właściwość w obiekcie SerializationDemoControl.

    Uwaga

    Wartość Content jest używana do włączenia serializacji kolekcji.

        // 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. Naciśnij klawisz F5, aby skompilować projekt i uruchomić kontrolkę w kontenerze testowym UserControl.

  9. Znajdź właściwość Strings w PropertyGrid kontenerze testowym UserControl. Wybierz właściwość Ciągi, a następnie wybierz przycisk wielokropka (The Ellipsis button (...) in the Properties window of Visual Studio), aby otworzyć Edytor kolekcji ciągów.

  10. Wprowadź kilka ciągów w Edytorze kolekcji ciągów. Oddziel je, naciskając klawisz Enter na końcu każdego ciągu. Po zakończeniu wprowadzania ciągów kliknij przycisk OK .

Uwaga

Wpisane ciągi są wyświetlane w obiekcie TextBoxSerializationDemoControl.

Serializowanie właściwości kolekcji

Aby przetestować zachowanie serializacji kontrolki, należy umieścić ją w formularzu i zmienić zawartość kolekcji za pomocą Edytora kolekcji. Można zobaczyć stan serializacji kolekcji, przeglądając specjalny plik projektanta, w którym Projektant programu Windows Forms emituje kod.

  1. Dodaj projekt aplikacji systemu Windows do rozwiązania. Nadaj projektowi SerializationDemoControlTestnazwę .

  2. W przyborniku znajdź kartę o nazwie SerializationDemoControlLib Components(Składniki biblioteki SerializationDemoControlLib). Na tej karcie znajdziesz element SerializationDemoControl. Aby uzyskać więcej informacji, zobacz Przewodnik: automatyczne wypełnianie przybornika za pomocą składników niestandardowych.

  3. Umieść element SerializationDemoControl w formularzu.

  4. Strings Znajdź właściwość w oknie Właściwości. Strings Kliknij właściwość, a następnie kliknij przycisk wielokropka (The Ellipsis button (...) in the Properties window of Visual Studio.), aby otworzyć Edytor kolekcji ciągów.

  5. Wpisz kilka ciągów w Edytorze kolekcji ciągów. Rozdziel je, naciskając klawisz Enter na końcu każdego ciągu. Po zakończeniu wprowadzania ciągów kliknij przycisk OK .

    Uwaga

    Wpisane ciągi są wyświetlane w obiekcie TextBoxSerializationDemoControl.

  6. W Eksplorator rozwiązań kliknij przycisk Pokaż wszystkie pliki.

  7. Otwórz węzeł Form1. Poniżej znajduje się plik o nazwie Form1.Projektant. cs lub Form1.Projektant. vb. Jest to plik, w którym Projektant formularzy systemu Windows emituje kod reprezentujący stan czasu projektowania formularza i jego kontrolek podrzędnych. Otwórz ten plik w Edytorze kodu.

  8. Otwórz region o nazwie Formularz systemu Windows Projektant wygenerowany kod i znajdź sekcję z etykietą serializationDemoControl1. Pod tą etykietą znajduje się kod reprezentujący serializowany stan kontrolki. Ciągi wpisane w kroku 5 są wyświetlane w przypisaniu do Strings właściwości . W poniższych przykładach kodu w językach C# i Visual Basic pokazano kod podobny do tego, co zobaczysz, jeśli wpisać ciągi "czerwony", "pomarańczowy" i "żółty".

    this.serializationDemoControl1.Strings = new string[] {
            "red",
            "orange",
            "yellow"};
    
    Me.serializationDemoControl1.Strings = New String() {"red", "orange", "yellow"}
    
  9. W Edytorze kodu zmień wartość DesignerSerializationVisibilityAttribute właściwości Hiddenna Strings .

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
    
  10. Ponownie skompiluj rozwiązanie i powtórz kroki 3 i 4.

Uwaga

W takim przypadku Projektant formularzy systemu Windows nie emituje żadnego przypisania do Strings właściwości .

Następne kroki

Gdy już wiesz, jak serializować kolekcję typów standardowych, rozważ bardziej szczegółowe zintegrowanie niestandardowych kontrolek ze środowiskiem projektowania. W poniższych tematach opisano sposób ulepszania integracji w czasie projektowania kontrolek niestandardowych:

Zobacz też