Re: [C# 2.0] Динамическое управление набором свойств
От: vehfl  
Дата: 26.08.09 13:50
Оценка:
Здравствуйте, _FRED_:

немного модифицировал ваш код под свои нужды:

   [TypeConverter(typeof(DirectionTypeConverter))]
    public class Direction : Component
    {
        ....
        DateTime registrationDate;
        DateTime removeFromControlDate;
        bool onPost = false;

        ....
        [Browsable(false)]
        public bool OnPost
        {
            get { return onPost; }
            set { onPost = value; }
        }

        [DisplayName("Время обработки")]
        [Description("Время обработки направления на таможне. Отсчет ведется от даты регистрации направления на таможне.")]
        public string TimeOfProcessing
        {
            get
            {
                string result = "";
                TimeSpan ts;
                if (removeFromControlDate == new DateTime())
                    ts = DateTime.Now - registrationDate;
                else
                    ts = removeFromControlDate - registrationDate;
                if (ts.Days > 0) result = ts.Days.ToString() + " д. ";
                return result + ts.Hours.ToString() + " час. " + ts.Minutes.ToString() + " мин.";
            }
        }
    }

    class DirectionTypeConverter : CustomPropertiesTypeConverter<Direction>
    {
        protected override Attribute[] GetPropertyAttributes(Direction component, PropertyDescriptor property)
        {
            if (property.Name == "TimeOfProcessing")
            {
                // для проверки попадаю ли я сюда
                System.Windows.Forms.MessageBox.Show(component.OnPost.ToString());
                if (component.OnPost)
                {
                    return new Attribute[] { BrowsableAttribute.No };
                }
                else
                {
                    return new Attribute[] { BrowsableAttribute.Yes };
                }
            }
            return EmptyAttributes;
        }
    }

класс CustomPropertiesTypeConverter остался без изменений.... при созданни класса Direction свойтству OnPost присваиваю true...

когда запускаю из под VisualStudio 2005 все нормально: появляется сообщние "True" и свойство TimeOfProcessing скрывается...
все это скомпилирован в firstdll...
есть другое приложение на С# seconddll котороя тоже представляет из себя dll... она использует firstdll... из под VS2005 все работает: появляется сообщние "True" и свойство TimeOfProcessing скрывается...

проблема заключается в следующем: seconddll регистрирую как com... запускаю приложение написанное на VB, которая в свою очередь вызывает этот com (seconddll) использующая firstdll. Но при этом свойство TimeOfProcessing не скрывается(((, сообщние тоже не появляется...

версии файлов сверены и совпадают

еще написал тестовое консольное приложение на C# все также работает нормально: появляется сообщние "True" и свойство TimeOfProcessing скрывается...

чтобы убедиться что свойство OnPost равно True, такой код
            propertyGrid.SelectedObject = e.Node.Tag;
            MessageBox.Show((e.Node.Tag as Direction).OnPost.ToString());

во всех случаях получаю сообщение с текстом True, в том и числе и в случае когда свойство TimeOfProcessing не скрывается

как можно это побороть?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.