2016-10-30 2 views
1

Я хочу создать класс, который происходит из объекта ListView.Как заставить значение свойства на производном объекте?

class MyListView : ListView 
{ 
} 

Я попробовал несколько вещей, чтобы заставить свойство по умолчанию View, но ничего я, кажется, делать имеет никакого эффекта в свойствах объекта во время разработки.

Некоторые из вещей, которые я попробовал это ...

public MyListView():base() 
{ 
    base.View = View.Tile; 
} 

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] 
[DefaultValue(View.Tile)] 
new public View View 
{ 
    get { 
     return base.View; 
    } 
    set { 
     base.View = value; 
    } 
} 

protected override void InitLayout() 
{ 
    base.InitLayout(); 
    base.View = View.Tile; 
} 

Так что мой вопрос, как я могу либо заставить значение всегда быть постоянным на View собственности или как я могу установить значение по умолчанию для это и скрыть свойство в моем новом классе?

ответ

1

В обычных случаях этого достаточно, чтобы переопределить свойство и поставить нужное значение как в геттер, так и в сеттер. Но View Недвижимость ListView - это особый случай. ListViewDesigner добавляет затененную недвижимость View дизайнеру.

Если вы посмотрите на ListViewDesigner класса, вы увидите, независимо от new Посмотреть собственности, дизайнер использует View свойства базового класса: ((ListView) base.Component).View = value;.

Что мы можем сделать, чтобы заставить ListView использовать определенный вид во времени?

Вы можете украсить свой новый View объект Browsable(false). Таким образом, он не показывает свойство View в сетке свойств, но он показывает свойство в списке действий управления.

Чтобы удалить этот список действий, вы можете зарегистрировать другие Designer для вашего контроля, например ControlDesigner:

[Designer(typeof(ControlDesigner))] 
public class MyListView : ListView 
{ 
    public MyListView() 
    { 
     this.View = System.Windows.Forms.View.Tile; 
    } 
    [Browsable(false)] 
    new public View View 
    { 
     get 
     { 
      return System.Windows.Forms.View.Tile; 
     } 
     set 
     { 
      base.View = System.Windows.Forms.View.Tile; 
     } 
    } 
} 

Кроме того, как другой вариант вместо регистрации нового дизайнера для управления, вы можете получить экземпляр дизайнера для контроль и очистить списки действий.

Не забудьте добавить ссылку на System.Design.dll и добавить using System.Windows.Forms.Design;

+0

Ницца! Спасибо за пример. –

+0

ОК, откуда взялся 'ControlDesigner'? –

+1

Добавьте ссылку на 'System.Design.dll', чем добавьте' using System.Windows.Forms.Design; ' –

Смежные вопросы