А>Так вот ничего не происходит. Полученное значение не записывает в исходный код. В самом поле я его вижу, могу даже поменять и т.д. А как его в исходник загнать?
А>Что я делаю не так?
А>Спасибо.
Народ, разобрался.
Мож кому понадобится.
Был неправильно реализован Conveter
Вместо:
// Overrides the ConvertTo method of TypeConverter.
public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture, object value, Type destinationType)
{
if (destinationType == typeof(string))
{
//Если тип назначения - строка, то вернем полное имя сборки
return ((Type)value).AssemblyQualifiedName;
}
//Все другие типы пусть конвертирует базовый класс
return base.ConvertTo(context, culture, value, destinationType);
}
Нужно было просто написать:
public override object ConvertTo(ITypeDescriptorContext context,
CultureInfo culture, object value, Type destinationType)
{
//Вернем значение поля, к. редактируем
return ((UserControl1)value).BindForm;
}
Т.е. не нужно было передавать право преобразования в базовый класс. А просто вернуть значение свойства.
Так же полностью отказался от использования виртуальных свойств. Дизайнером для класса назначил стандартный. Вот полный заголовок:
//Теперь первый аттрибут можно и не указывать
//[Designer(typeof(/*BindFormComponentDesigner*/ControlDesigner)), DesignerCategory("Default")]
[TypeConverter(typeof(FormTypeConverter))]
[Serializable]
public partial class UserControl1 : UserControl
{...}
А Editor использовал для свойства напрямую:
[Editor(typeof(BindFormEditor), typeof(System.Drawing.Design.UITypeEditor))]
public Type BindForm
{ get; set; }
В результате пропала возможность править значение прямо в поле свойства. Но это даже и к лучшему (защита от дурака). А саму строку для извлечения типа формирую в самописной форме, к. вызывается при нажатии кнопки с троеточием.
После этих манипуляций все получилось.