public PropertyDescriptorComponent(string name, string ic, CollectionComponentNames owner, Attribute[] attrs) : base(name, attrs) { _ic = ic; _owner = owner; }
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if (context != null && provider != null) { IWindowsFormsEditorService edSvc = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (edSvc != null) { Type scopeType = null; Type scopeTypeWeb = null; if (context.PropertyDescriptor.Attributes != null) { foreach (Attribute a in context.PropertyDescriptor.Attributes) { ComponentReferenceSelectorTypeAttribute cr = a as ComponentReferenceSelectorTypeAttribute; if (cr != null) { scopeType = cr.ScopeType; } else { ComponentReferenceSelectorTypeWebAttribute crw = a as ComponentReferenceSelectorTypeWebAttribute; if (crw != null) { scopeTypeWeb = crw.ScopeType; } } } } if (scopeType != null || scopeTypeWeb != null) { bool bForName = false; IComponent ic = context.Instance as IComponent; if (ic == null) { IClassId icid = context.Instance as IClassId; if (icid != null) { ic = icid.ObjectInstance as IComponent; } } if (ic == null) { CollectionComponentNames cc = context.Instance as CollectionComponentNames; if (cc != null) { ic = cc.Owner; bForName = true; } } if (ic != null && ic.Site != null) { ComponentList list = new ComponentList(edSvc); list.Items.Add(string.Empty); foreach (IComponent c in ic.Site.Container.Components) { Type t = c.GetType(); if (scopeType != null && scopeType.IsAssignableFrom(t)) { list.Items.Add(c); } else if (scopeTypeWeb != null && scopeTypeWeb.IsAssignableFrom(t)) { list.Items.Add(c); } } if (list.Items.Count > 0) { edSvc.DropDownControl(list); if (list.SelectedObj != null) { if (typeof(string).Equals(list.SelectedObj.GetType())) { value = null; } else { if (bForName) { IComponent ic2 = list.SelectedObj as IComponent; if (ic2 != null && ic2.Site != null) { value = ic2.Site.Name; } } else { value = list.SelectedObj; } } } } } } } } return(value); }