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