Здравствуйте, _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 не скрывается
как можно это побороть?