コード例 #1
0
        public PropertyDescriptorCollection GetProperties(Attribute[] attributes)
        {
            PropertyDescriptorCollection _properties;
            IClassInstance ci = _owner as IClassInstance;

            if (ci != null)
            {
                _properties = ci.GetInstanceProperties(new Attribute[] { });
                if (_pointer.IsXType != EnumXType.None)
                {
                    //remove Name property
                    for (int i = 0; i < _properties.Count; i++)
                    {
                        if (string.CompareOrdinal(_properties[i].Name, "Name") == 0)
                        {
                            _properties.Remove(_properties[i]);
                            break;
                        }
                    }
                    //add Name property
                    PropertyDescriptorCollection ps = TypeDescriptor.GetProperties(_pointer.ObjectInstance, true);
                    foreach (PropertyDescriptor p in ps)
                    {
                        if (string.CompareOrdinal(p.Name, "Name") == 0)
                        {
                            Attribute[] attrs;
                            if (p.Attributes != null)
                            {
                                attrs = new Attribute[p.Attributes.Count];
                                p.Attributes.CopyTo(attrs, 0);
                            }
                            else
                            {
                                attrs = new Attribute[] { };
                            }
                            _properties.Add(new PropertyDescriptorXName(this, p, attrs));
                            break;
                        }
                    }
                }
                List <PropertyClassDescriptor> cps = _pointer.CustomProperties;
                if (cps != null && cps.Count > 0)
                {
                    for (int i = 0; i < cps.Count; i++)
                    {
                        _properties.Add(cps[i]);
                    }
                }
            }
            else
            {
                _properties = _pointer.Properties;
            }
            _constructor = new ConstructorInstance(this);
            if (_pointer.Definition != null)
            {
                List <ConstructorClass> ccs = _pointer.Definition.GetConstructors();
                if (ccs != null && ccs.Count > 0)
                {
                    if (ccs.Count == 1 && ccs[0].ParameterCount == 0)
                    {
                    }
                    else
                    {
                        _constructor.SetConstructor(ccs[0]);
                        PropertyDescriptorConstructorInstance pconstruct = new PropertyDescriptorConstructorInstance(this);
                        _properties.Add(pconstruct);
                    }
                }
            }
            return(_properties);
        }