вызвать Invalidate() после typeEditor в design time
От: kr12  
Дата: 23.12.07 21:09
Оценка:
В неком контроле в design time c помощью property editor-а студии можно править колекцию неких итемов. Код за это отвечающий примерно такой:
private System.Collections.Generic.List<SomeType> _SomeTypeItems = new System.Collections.Generic.List<SomeType>();
[
Description("..."),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
Editor(typeof(System.ComponentModel.Design.CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))
]
public System.Collections.Generic.List<SomeType> SomeTypeItems
{
  get
  {
    return _SomeTypeItems;
  }
}


После правки нужно вызвать Invalidate() для отображения изменений. Как это правильно сделать?
Re: вызвать Invalidate() после typeEditor в design time
От: apps Россия  
Дата: 24.12.07 09:59
Оценка:
Здравствуйте, kr12, Вы писали:

K>После правки нужно вызвать Invalidate() для отображения изменений. Как это правильно сделать?

//...
[RefreshProperties(RefreshProperties.Repaint)]
public System.Collections.Generic.List<SomeType> SomeTypeItems
{
    //...
}
Если нам не помогут, мы тоже никого не пощадим...
Re[2]: вызвать Invalidate() после typeEditor в design time
От: kr12  
Дата: 31.12.07 20:17
Оценка:
Повидимому я нечетко сформулировал задачу: нужно обновить вид не редактора свойств, встроенного в студию, а вид самого контрола, к чему и призывает его метод Invalidate().
С трудом поборол это исспользуя свой CollectionEdior:

class SampleCollectionEditor : System.ComponentModel.Design.CollectionEditor
{
    public SampleCollectionEditor(Type type)
        : base(type)
    {
    }

    public override bool GetPaintValueSupported(ITypeDescriptorContext context)  //или можно перекрыть GetEditStyle..
    {
        if (base.Context != null) ((Control)base.Context.Instance).Invalidate(); //эта строка
        return base.GetPaintValueSupported(context);
    }
}


Думаю это не лучший выход. Что посоветуете?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.