自定义控件覆盖命令按钮

时间:2010-04-25 12:47:00

标签: c# winforms custom-controls

我正在尝试创建一个自定义命令按钮,默认宽度和高度为特定设置。我有以下代码:

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);
    }
}

然而,它不会编译,因为它告诉我无法覆盖宽度或高度。任何人都可以告诉我,如果我接近这个错误,或者是否有办法解决这个问题?

2 个答案:

答案 0 :(得分:1)

首先,请注意,DefaultValueAttribute实际上并未设置默认值!此属性仅供Windows窗体设计器使用,以确定它是否应在“属性”窗口中以常规或粗体字体显示属性;如果属性与提供给DefaultValueAttribute的参数具有不同的值,则该属性将以粗体显示。

要设置默认尺寸,您可以:

  1. 覆盖DefaultSize属性(如@Jarek的回答所示)或

  2. 在构造函数中设置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属性。