我正在尝试创建一个自定义命令按钮,默认宽度和高度为特定设置。我有以下代码:
public partial class myCommandButton : Button
{
public magCommandButton()
{
InitializeComponent();
}
[DefaultValue(840)]
public override int Width
{
get
{
return base.Width;
}
set
{
base.Width = value;
}
}
[DefaultValue(340)]
public override int Height
{
get
{
return base.Height;
}
set
{
base.Height = value;
}
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
然而,它不会编译,因为它告诉我无法覆盖宽度或高度。任何人都可以告诉我,如果我接近这个错误,或者是否有办法解决这个问题?
答案 0 :(得分:1)
首先,请注意,DefaultValueAttribute
实际上并未设置默认值!此属性仅供Windows窗体设计器使用,以确定它是否应在“属性”窗口中以常规或粗体字体显示属性;如果属性与提供给DefaultValueAttribute
的参数具有不同的值,则该属性将以粗体显示。
要设置默认尺寸,您可以:
覆盖DefaultSize
属性(如@Jarek的回答所示)或
在构造函数中设置Size
属性(尽管此解决方案不那么优雅)。
答案 1 :(得分:0)
Width和Height不是虚拟成员(检查Reflector中的Control类),因此最简单的方法是覆盖DefaultSize属性:
protected override Size DefaultSize
{
get
{
return new Size(840, 340);
}
}
您也可以使用new modifier,但对于此示例,我建议覆盖DefaultSize。如果你在Reflector中检查Control类,你会看到,Height和Width使用了很多内部/私有成员。所以我并不认为实施所有这些都是一个好主意。 只需使用DefaultSize属性。