How can I let the user edit my Multi-Dimensional collection?

Platform: WinForms| Category: Type Editors

This is usually a problem if you have a custom collection type MyCollection which itself can take items of type MyCollection.

The problem is because a single instance of a UITypeEditor is used by the framework irrespective of how many types and instances it serves to edit. Which means you cannot start editing your MyCollection from within a MyCollection editor, since the editor is already open.

To work around this problem, you can provide a custom editor as follows:


public class CustomCollectionEditor : CollectionEditor
{
	// The base class has its own version of this property
	// cached CollectionForm
	private CollectionForm collectionForm;

	public CustomCollectionEditor(Type type)
		: base(type)
	{
	}

	public override object EditValue(
		ITypeDescriptorContext context, IServiceProvider provider, 
		object value) 
	{
		if(this.collectionForm != null && this.collectionForm.Visible)
		{
			// If the CollectionForm is already visible, then create a new instance
			// of the editor and delegate this call to it.
			BarItemsCollectionEditor editor = new BarItemsCollectionEditor(this.CollectionType);
			return editor.EditValue(context, provider, value);
		}
		else return base.EditValue(context, provider, value);
	}

	protected override CollectionForm CreateCollectionForm()
	{
		// Cache the CollectionForm being used.
		this.collectionForm = base.CreateCollectionForm();
		return this.collectionForm;
	}
}

Share with

Related FAQs

Couldn't find the FAQs you're looking for?

Please submit your question and answer.