Compartilhar via


Exemplo de Editor de Coleção

Este exemplo mostra como criar um controle chamado ContactCollectionEditor que implementa um editor de coleção personalizado.O exemplo mostra como especificar o tipo exato de objeto que um desenvolvedor de página pode adicionar à propriedade coleção do controle ao usar um editor de coleção personalizado.Você associa um editor de coleção com uma propriedade de coleção (ou o tipo de propriedade) aplicando a propriedade de coleção EditorAttribute do controle.

Se você usar uma implementação IList fortemente tipada para sua propriedade da coleção, e todos os objetos na coleção serão do mesmo tipo, você não precisa de um editor de coleção personalizado.Nesse caso, você pode depender do CollectionEditor interno como o editor de propriedades porque CollectionEditor inferirá o tipo de objeto a partir do tipo da propriedade Items da implementação do IList.Você deve usar um conjunto tipado sempre que possível.No entanto, se você usar uma coleção como ArrayList como o tipo de propriedade de coleção de um controle, é necessário um editor de coleção personalizada para especificar o tipo de objeto da coleção de itens.

O ContactCollectionEditor descrito neste exemplo é usado pela propriedade Contacts do controle QuickContacts descrito em Exemplo da propriedade de coleção do controle da Web.Ele permite que objetos do tipo Contact sejam adicionados à propriedade Contacts através de uma interface do usuário (UI) de um editor de coleção .The ContactCollectionEditor classe deriva deCollectionEditor e substitui o CreateCollectionItemType método para retornar a Contact Digite.

Se a propriedade da coleção do seu controle contiver objetos de diferentes tipos, implemente um editor de coleção semelhante ao exemplo mas substitua o método CreateNewItemTypes a invés do método CreateCollectionItemType e retorne os tipos de item corretos.

Listagem de código para o ContactCollectionEditor

' ContactCollectionEditor.vb
Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.Reflection

Namespace Samples.AspNet.VB.Controls
    Public Class ContactCollectionEditor
        Inherits CollectionEditor

        Public Sub New(ByVal newType As Type)
            MyBase.new(newType)
        End Sub

        Protected Overrides Function CanSelectMultipleInstances() _
        As Boolean
            Return False
        End Function

        Protected Overrides Function CreateCollectionItemType() As Type
            Return GetType(Contact)
        End Function
    End Class
End Namespace
// ContactCollectionEditor.cs
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Reflection;

namespace Samples.AspNet.CS.Controls
{
    public class ContactCollectionEditor : CollectionEditor
    {
        public ContactCollectionEditor(Type type)
            : base(type)
        {
        }

        protected override bool CanSelectMultipleInstances()
        {
            return false;
        }

        protected override Type CreateCollectionItemType()
        {
            return typeof(Contact);
        }
    }
}

Construindo e Usando o Exemplo

Compile o editor ContactCollectionEditor com a controle QuickContacts e a classe Contacts descrita em Exemplo da propriedade de coleção do controle da Web.Você deve adicionar uma referência ao conjunto de módulos (Assembly) System.Design para a compilação.

Para obter mais informações sobre a compilação e o uso dos exemplos de controles personalizados, consulte Construindo os Exemplos de Controle de Servidor Personalizado.

Consulte também

Conceitos

Exemplo da propriedade de coleção do controle da Web

Construindo os Exemplos de Controle de Servidor Personalizado

Outros recursos

Desenvolvendo Controles Personalizados ASP.NET Server