コード例 #1
0
        private IPropertyChooser CreateChooserForProperty(PropertyInfo pi, object target)
        {
            IPropertyChooser chooser = null;

            if (pi.PropertyType == typeof(string))
            {
                chooser = new StringChooser();
            }

            else if (pi.PropertyType.IsEnumType())
            {
                chooser = new EnumeratedTypeChooser(pi.PropertyType);
            }

            else if (pi.PropertyType.IsIntegerType())
            {
                chooser = new IntegerChooser(pi.PropertyType);
            }

            else if (pi.PropertyType == typeof(bool))
            {
                chooser = new BooleanChooser();
            }

            else
            {
                chooser = new StringChooser();
            }

            if (chooser != null)
            {
                object val = pi.GetValue(target, null);

                TypeConverter tc = new TypeConverter();

                chooser.PropertyName  = pi.Name;
                chooser.PropertyValue = val == null?
                                        Translator.Translate("TXT_NA") : tc.ConvertToInvariantString(val);
            }

            return(chooser);
        }
コード例 #2
0
        public void DisplayProperties(List <object> objects)
        {
            pnlPropertyChoosers.Controls.Clear();
            pnlPropertyChoosers.RowStyles.Clear();

            if (objects == null || objects.Count < 1)
            {
                DisplayNothing();
                return;
            }

            // Determine the browsable properties
            foreach (object obj in objects)
            {
                List <PropertyInfo> browsableProperties = new List <PropertyInfo>();

                BindingFlags   bf     = BindingFlags.Instance | BindingFlags.Public;
                PropertyInfo[] piList = obj.GetType().GetProperties(bf);
                if (piList != null)
                {
                    foreach (PropertyInfo pi in piList)
                    {
                        bool     isBrowsable = true;
                        object[] attributes  = pi.GetCustomAttributes(true);
                        if (attributes != null)
                        {
                            foreach (var x in attributes)
                            {
                                BrowsableAttribute ba = x as BrowsableAttribute;
                                if (ba != null)
                                {
                                    isBrowsable = ba.Browsable;
                                    break;
                                }
                            }
                        }

                        if (isBrowsable)
                        {
                            browsableProperties.Add(pi);
                        }
                    }
                }

                foreach (PropertyInfo pi in browsableProperties)
                {
                    IPropertyChooser chooser = CreateChooserForProperty(pi, obj);
                    Control          c       = chooser as Control;
                    if (c != null)
                    {
                        RowStyle rs  = new RowStyle(SizeType.AutoSize, 30);
                        int      row = pnlPropertyChoosers.RowStyles.Add(rs);

                        c.Enabled = pi.CanWrite;
                        c.Dock    = DockStyle.Fill;
                        pnlPropertyChoosers.Controls.Add(c, 0, row);
                    }
                }
            }

            Translator.TranslateControl(this, DesignMode);
        }