C# 自定义控件覆盖命令按钮

C# 自定义控件覆盖命令按钮,c#,winforms,custom-controls,C#,Winforms,Custom Controls,我正在尝试创建一个自定义命令按钮,默认宽度和高度为特定设置。我有以下代码: public partial class myCommandButton : Button { public magCommandButton() { InitializeComponent(); } [DefaultValue(840)] public override int Width { get {

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

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

但是,它不会编译,因为它告诉我不能覆盖宽度或高度。有人能告诉我我是否处理得不对,或者是否有办法解决这个问题吗?

宽度和高度不是虚拟成员(请检查中的控件类),因此最简单的方法是重写DefaultSize属性:

        protected override Size DefaultSize
        {
            get
            {
                return new Size(840, 340);
            }
        }
也可以使用,但对于本例,我建议覆盖DefaultSize。如果您在Reflector中检查控件类,您将看到,该高度和宽度使用了大量内部/私有成员。所以我不认为实施所有这些东西是个好主意。
只需使用DefaultSize属性。

您不必使用reflector来检查类方法/定义/修饰符等。您只需在visual studio中通过单击上下文菜单中“控件”或任何需要检查的类型上方的“转到定义”即可查看类元数据;)好。。。我不喜欢只查看元数据。我正在使用resharper+scout插件,非常棒。新的reflector有一些特性,您可以直接从代码转到这个工具并检查实现,但我认为scout更好。但是新的Resharper(V5.0)是最好的——您可以直接从VS:D观看编译的程序集源代码