Partilhar via


Demonstra Passo a passo: Serializar coleções de tipos padrão

Seus controles personalizados às vezes exporão uma coleção como uma propriedade. Este passo a passo demonstra como usar a DesignerSerializationVisibilityAttribute classe para controlar como uma coleção é serializada em tempo de design. A aplicação do Content valor à propriedade collection garante que a propriedade será serializada.

Cuidado

Este conteúdo foi escrito para .NET Framework. Se você estiver usando o .NET 6 ou uma versão posterior, use este conteúdo com cuidado. O sistema de designer foi alterado para o Windows Forms e é importante que você revise as alterações do Designer desde o artigo do .NET Framework .

Para copiar o código neste tópico como uma lista única, consulte Como serializar coleções de tipos padrão com o DesignerSerializationVisibilityAttribute.

Pré-requisitos

É necessário o Visual Studio para concluir este passo a passo.

Criar um controle com uma coleção serializável

A primeira etapa é criar um controle que tem uma coleção serializável como uma propriedade. Você pode editar o conteúdo dessa coleção usando o Editor de Coleção, acessível por meio da janela Propriedades.

  1. No Visual Studio, crie um projeto de biblioteca de controle do Windows e nomeie-o SerializationDemoControlLib.

  2. Renomeie UserControl1 para SerializationDemoControl. Para obter mais informações, consulte Renomear uma refatoração de símbolo de código.

  3. Na janela Propriedades, defina o Padding.All valor da propriedade como 10.

  4. Coloque SerializationDemoControlum TextBox controle no .

  5. Selecione o controle TextBox. Na janela Propriedades, defina as propriedades a seguir.

    Propriedade Alterar para
    Multilinha true
    Encaixar Fill
    ScrollBars Vertical
    ReadOnly (somente-leitura) true
  6. No Editor de Códigos, declare um campo de matriz de cadeia de caracteres chamado stringsValue em 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. Defina a propriedade Strings no SerializationDemoControl.

    Observação

    O Content valor é usado para habilitar a serialização da coleção.

        // 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. Pressione F5 para compilar o projeto e executar o controle no contêiner de teste UserControl.

  9. Localize a PropertyGrid propriedade Strings no contêiner de teste UserControl. Selecione a propriedade Strings e, em seguida, selecione o botão de reticências (The Ellipsis button (...) in the Properties window of Visual Studio) para abrir o Editor de Coleção de Cadeias de Caracteres.

  10. Insira várias cadeias de caracteres no Editor de Conjunto de Cadeia de Caracteres. Separe-os pressionando a tecla Enter no final de cada cadeia de caracteres. Clique em OK quando terminar de inserir cadeias de caracteres.

Observação

As cadeias de caracteres digitadas aparecem no TextBox arquivo SerializationDemoControl.

Serializar uma propriedade de coleção

Para testar o comportamento de serialização do seu controle, coloque-o em um formulário e altere o conteúdo da coleção com o Editor de Coleção. Você pode ver o estado da coleção serializada examinando um arquivo de designer especial no qual o Windows Forms Designer emite código.

  1. Adicione um projeto de Aplicativos do Windows à solução. Dê ao projeto o nome de SerializationDemoControlTest.

  2. Na Caixa de Ferramentas, localize a guia chamada Componentes da SerializationDemoControlLib. Nessa guia, você encontrará o SerializationDemoControl. Para mais informações, consulte Instruções passo a passo: preenchendo de forma automática a caixa de ferramentas com componentes personalizados.

  3. Coloque um SerializationDemoControl em seu formulário.

  4. Localize a propriedade Strings na janela Propriedades. Clique na Strings propriedade e, em seguida, clique no botão de reticências (The Ellipsis button (...) in the Properties window of Visual Studio.) para abrir o Editor de Coleção de Cadeias de Caracteres.

  5. Digite várias cadeias de caracteres no Editor de Conjunto de Cadeia de Caracteres. Separe-os pressionando Enter no final de cada cadeia de caracteres. Clique em OK quando terminar de inserir cadeias de caracteres.

    Observação

    As cadeias de caracteres digitadas aparecem no TextBox arquivo SerializationDemoControl.

  6. Em Gerenciador de Soluções, clique no botão Mostrar Todos os Arquivos.

  7. Abra o nó Form1. Abaixo está um arquivo chamado Form1.Designer.cs ou Form1.Designer.vb. Este é o arquivo no qual o Designer de Formulários do Windows emite um código que representa o estado de tempo de design do formulário e seus controles filho. Abra esse arquivo no Editor de Códigos.

  8. Abra a região chamada Código gerado pelo Windows Form Designer e localize a seção rotulada como serializationDemoControl1. Sob esse rótulo está o código que representa o estado serializado do seu controle. As cadeias de caracteres que você digitou na etapa 5 aparecem em uma atribuição para a propriedade Strings. Os exemplos de código a seguir em C# e Visual Basic, mostram código semelhante ao que você verá se você digitou as cadeias de caracteres "vermelho", "laranja" e "amarelo".

    this.serializationDemoControl1.Strings = new string[] {
            "red",
            "orange",
            "yellow"};
    
    Me.serializationDemoControl1.Strings = New String() {"red", "orange", "yellow"}
    
  9. No Editor de códigos, altere o valor do DesignerSerializationVisibilityAttribute na Strings propriedade para Hidden.

    [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    
    <DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)> _
    
  10. Recompile a solução e repita as etapas 3 e 4.

Observação

Neste caso, o Designer de Formulários do Windows não emite nenhuma atribuição para a propriedade Strings.

Próximas etapas

Se você souber como serializar uma coleção de tipos padrão, considere integrar seus controles personalizados mais profundamente no ambiente de tempo de design. Os tópicos a seguir descrevem como aprimorar a integração do tempo de design de seus controles personalizados:

Confira também