如何覆盖方法?

时间:2009-06-04 11:30:54

标签: c# winforms

我创建了一个按钮的OnPaint事件,我最近试图覆盖它,但是我失败了

我的代码:

    protected override void button1_Paint(PaintEventArgs e)
    {
    }

我收到此错误:“找不到合适的方法来覆盖”。

我该怎么做才能使错误消失,但保持方法为覆盖?

6 个答案:

答案 0 :(得分:3)

如果方法不是虚拟的,则无法覆盖它。如果您无法覆盖它,那么尝试保留override关键字是没有意义的。

如果您想隐藏该方法,请使用new关键字代替override

答案 1 :(得分:3)

您要覆盖的方法可能称为OnPaint,而不是button1_Paint。更改方法声明,使其看起来像这样:

protected override void OnPaint(PaintEventArgs e) { }

请注意,此代码应位于要从中重写方法的类的子类中。如果将此方法放在表单中,它将处理该表单的绘制。

答案 2 :(得分:1)

在基类中,您需要将方法声明为virtual

示例:

public class Person
{
    public virtual void DoSomething()
    {
        // do something here
    }
}

public class Employee : Person
{
    public override void DoSomething()
    {
        base.DoSomething();
    }
}

修改

也许这可以帮到你?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
    }

    private void button1_Paint(object sender, PaintEventArgs e)
    {

    }


}

答案 3 :(得分:0)

您应该将基类中的方法声明为virtual,以便能够覆盖它。

答案 4 :(得分:0)

您覆盖来自其他类的方法。要保留该方法,您必须将其放在子类中并从那里调用它。

你在与原始方法相同的类中有覆盖吗?如果是这样,只需合并函数并删除覆盖。

答案 5 :(得分:0)

我猜你现在有这样的事情:

public class MyButton : Button {
    public MyButton() {
        this.Paint += new PaintEventHandler(MyButton_Paint);
    }

    void MyButton_Paint(object sender, PaintEventArgs e) {
        //your code
    }
}

如果您从按钮继承,则应使用以下代码:

public class MyButton : Button {
    protected override void OnPaint(PaintEventArgs pevent) {
        base.OnPaint(pevent);
    }
}