2011-01-07 6 views
2

У меня есть объект, который наследуется от Button. Эта кнопка является свойством объекта, который наследуется от TableLayoutPanel. Свойство называется MyButton:C# Как установить значение по умолчанию для объекта в PropertyGrid?

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
**[DefaultValue(??? Something Like Visible = false ???)]** 
public CustomButton MyButton 
{ 
    get { return _button; } 
    set { _button = value; } 
} 

Теперь в конструкторе, я хочу, чтобы установить Visible свойство MyButton ложными. По умолчанию свойство Visible истинно, но в этом случае я хочу, чтобы оно было ложным.

Как это сделать?

+1

AFAIK, вам нужно будет установить этот атрибут непосредственно на нужное свойство, что означает свойство 'Visible' кнопки. – Bobby

+0

Но свойство 'Visible' находится в классе Button, а не в моем классе. Могу ли я перезаписать это? – Martijn

+0

Тогда вам придется инкапсулировать эту кнопку в свой собственный класс и переопределить это свойство. – Bobby

ответ

0

Override свойства, а затем установить значение по умолчанию:

[DefaultValue(false)] 
new public bool Visible 
{ 
    get { return base.Visible; } 
    set { base.Visible = value; } 
} 

Надеется, что это будет работать.

+0

Это не работает. Неважно, какое значение я задал в дизайнере, кнопка всегда невидима. – Martijn

+0

@Martijn: Тогда у вас есть что-то еще не так. Если настройка свойства в дизайнере не работает, это не сработает, если вы установите его в коде, независимо от атрибута или нет. –

+0

Да, когда я устанавливаю свойство в коде, он работает – Martijn

3
+1

+1: Просто избили меня. : o) –

+0

Я не могу этого сделать, потому что у меня нет типа bool. Это CustomButton. – Martijn

+0

Вы можете сделать это для всех типов, если тип значения по умолчанию соответствует типу свойства. –

1

Поскольку ваше значение не является постоянной величиной, не может быть использована с DefaultValueAttribute, так как эти значения необходимы во время компиляции. Вместо этого вы можете игнорировать DefaultValueAttribute, а в конструкторе вы можете инициализировать атрибут MyButton специальным экземпляром CustomButton с установленными на нем атрибутами по умолчанию. Единственная нерегулярность здесь заключается в том, что в сетке свойств значение свойства будет выделено жирным шрифтом, как если бы пользователь изменил его.

Вот пример:

public YourCustomControlClass() 
{ 
    this.MyButton = new CustomButton { Visible = false; }; 
} 
+0

Можете ли вы опубликовать образец? Я не понимаю этого полностью. – Martijn

1

в вашем MyButton класса, удалить все, что вы добавили пытается переопределить Visible свойство добавить следующий код:

public MyButton() 
{ 
    this.Visible=false; 
} 

Восстановите его, затем добавьте новый экземпляр Mybutton в вашу форму, вы увидите, что его видимое свойство в Designer установлено в F теперь.

+0

Я не использую экземпляры 'MyButton' непосредственно в моей форме. У меня есть customPanel, где кнопки включены. Через панель «Пользовательский» я выставляю кнопки со свойствами. Когда я устанавливаю свойство 'Visible' в конструкторе на false, а в дизайнере я устанавливаю свойство CustomPanel.MyButton.Visible равным true, кнопка остается невидимой. – Martijn

+0

Я знаю, что вы не используете ** Mybutton ** напрямую, но вы должны иметь доступ к ** Mybutton.cs ** (в противном случае вы должны называть его ** Ихбатом ** :)), измените его, как я сказал в своем ответе, перестройте его, а затем вы получите нужный результат. – Bolu

+0

Я пробовал то, что вы предлагали, но это не работает. Свойство действительно ложно, но когда я устанавливаю его в true, он не отображает кнопку. Но когда я не делаю 'this.Visible = false', кнопка видна. Но я не хочу этого, по умолчанию кнопка должна быть invisble. – Martijn

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