コレクション エディタの例

更新 : 2007 年 11 月

この例では、カスタム コレクション エディタを実装する ContactCollectionEditor というコントロールを作成する方法を示します。この例では、カスタム コレクション エディタを使用する際に、ページの開発者がコントロールのコレクション プロパティに追加できるオブジェクトの型を正しく指定する方法を示します。EditorAttribute をコントロールのコレクション プロパティに適用することによって、コレクション エディタをコレクション プロパティ (またはプロパティの型) に関連付けます。

コレクション プロパティに厳密に型指定された IList の実装を使用し、コレクションのすべてのオブジェクトの型が同じ場合、カスタム コレクション エディタは必要ありません。この場合、CollectionEditorIList の実装の Items プロパティの型によってオブジェクトの型を推測するため、組み込みの CollectionEditor をプロパティ エディタとして使用できます。できるだけ型指定されたコレクションを使用してください。ただし、コントロールのコレクション プロパティの型として ArrayList などのコレクションを使用する場合は、コレクション項目のオブジェクト型を指定するためにカスタム コレクション エディタが必要です。

この例の ContactCollectionEditor は、「Web コントロールのコレクション プロパティの例」に説明されている QuickContacts コントロールの Contacts プロパティが使用します。これによって、コレクション エディタのユーザー インターフェイス (UI) を使用して Contact 型のオブジェクトを Contacts プロパティに追加できます。ContactCollectionEditor クラスは CollectionEditor から派生し、Contact 型を返すように CreateCollectionItemType メソッドをオーバーライドします。

コントロールのコレクション プロパティに別の型のオブジェクトが含まれる場合、この例のようなコレクション エディタを実装します。ただし、CreateCollectionItemType メソッドの代わりに CreateNewItemTypes メソッドをオーバーライドして正しい項目の型を返します。

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);
        }
    }
}

例のビルドと使用

Web コントロールのコレクション プロパティの例」に記載されている QuickContacts コントロールと Contacts クラスと共に ContactCollectionEditor エディタをコンパイルします。コンパイルには System.Design アセンブリへの参照を追加する必要があります。

カスタム コントロールの例のコンパイルと使用の詳細については、「カスタム サーバー コントロールの例のビルド」を参照してください。

参照

概念

Web コントロールのコレクション プロパティの例

カスタム サーバー コントロールの例のビルド

その他の技術情報

ASP.NET カスタム サーバー コントロールの開発