コレクション エディタの例
更新 : 2007 年 11 月
この例では、カスタム コレクション エディタを実装する ContactCollectionEditor というコントロールを作成する方法を示します。この例では、カスタム コレクション エディタを使用する際に、ページの開発者がコントロールのコレクション プロパティに追加できるオブジェクトの型を正しく指定する方法を示します。EditorAttribute をコントロールのコレクション プロパティに適用することによって、コレクション エディタをコレクション プロパティ (またはプロパティの型) に関連付けます。
コレクション プロパティに厳密に型指定された IList の実装を使用し、コレクションのすべてのオブジェクトの型が同じ場合、カスタム コレクション エディタは必要ありません。この場合、CollectionEditor は IList の実装の 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 アセンブリへの参照を追加する必要があります。
カスタム コントロールの例のコンパイルと使用の詳細については、「カスタム サーバー コントロールの例のビルド」を参照してください。