C#如何在propertygrid中设置对象的默认值?

C#如何在propertygrid中设置对象的默认值?,c#,winforms,C#,Winforms,我有一个从按钮继承的对象。此按钮是从TableLayoutPanel继承的对象的属性。该属性称为MyButton: [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] **[DefaultValue(??? Something Like Visible = false ???)]** public CustomButton MyButton { get { return _button; }

我有一个从按钮继承的对象。此按钮是从TableLayoutPanel继承的对象的属性。该属性称为
MyButton

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
**[DefaultValue(??? Something Like Visible = false ???)]**
public CustomButton MyButton
{
    get { return _button; }
    set { _button = value; }
}
现在,在设计器中,我想将
MyButton
Visible
属性设置为false。默认情况下,
Visible
属性为true,但在本例中,我希望它为false


如何执行此操作?

覆盖属性,然后设置默认值:

[DefaultValue(false)]
new public bool Visible
{
  get { return base.Visible; }
  set { base.Visible = value; }
} 
希望这能奏效

[DefaultValue(false)]

因为您的值不是常量,所以不能与
DefaultValueAttribute
一起使用,因为编译时需要这些值。相反,您可以忽略
DefaultValueAttribute
,在构造函数中,您可以使用
CustomButton
的自定义实例初始化
MyButton
属性,并在其上设置默认属性。这里唯一的不规则之处是,在属性网格中,属性值将显示为粗体,就好像用户已经更改了它一样

以下是一个例子:

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

在您的
MyButton
类中,删除试图覆盖Visible属性而添加的任何内容添加以下代码:

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


重新构建它,然后将新的Mybutton实例添加到表单中,您可以在设计器中看到它的visible属性现在设置为False。

a好的,您必须直接在所需属性上设置该属性,这意味着在按钮的
visible
-属性处。但是
visible
属性在button类上,不是在我自己的班上。我可以覆盖它吗?然后你必须将该按钮封装到你自己的类中并覆盖该属性。这不起作用,因为当VS 2010崩溃时,这是一个问题…你可能需要提交一个错误报告。这不起作用。不管我在设计器中设置了什么值,按钮总是invisible@Martijn:那么你又出了什么问题。如果在设计器中设置属性不起作用,那么无论是否使用属性,如果在代码中设置属性都不起作用。请参阅编辑版本,其中覆盖属性,然后设置默认值。可能是我的系统,但当我这样做时,VS在我打开表单进行设计时崩溃。奇怪的是,它不应该真的崩溃,它是哪个版本的VS?我不能这样做,因为我的属性不是bool类型。这是一个CustomButton。只要默认值类型与属性的类型匹配,您就可以对所有类型执行此操作。这正是它不适用于我的原因,因为属性的类型为
CustomButton
。如果您试图更改CustomButton的实际属性,setter中的最后一行应该设置所需的属性_按钮。可见=错误;你能寄一份样品吗?我不完全理解。我没有直接在表单上使用
MyButton
实例。我有一个按钮在上面的自定义面板。通过自定义面板,我将显示带有属性的按钮。当我在构造函数中将
Visible
属性设置为false,在设计器中将CustomPanel.MyButton.Visible属性设置为true时,按钮保持不可见。我知道您不直接使用MyButton,但您必须有权访问MyButton.cs(否则您应该称之为按钮:),请按照我在回答中的说明修改它,重建它,然后你会得到你想要的结果。我已经尝试了你的建议,但它不起作用。该属性确实为false,但当我将其设置为true时,它不会显示按钮。但是当我不执行
this.Visible=false
时,按钮是可见的。但我不希望这样,在默认情况下,当将构造函数中的Visible属性设置为false时,按钮必须是InvisibleNother。在designer中,我将属性设置为true时,我构建项目(不运行,只构建),然后返回同一属性,该属性将更改为false。如果您愿意,我可以将项目发送给您?我现在知道您的问题:当您在构造函数中设置
this.Visible=false
时,您只能使用代码而不是设计器将其更改回
true
。。。。。