2009-06-04 55 views
-1

我创建了按钮的OnPaint事件,我最近试图重写,但我失败了如何覆盖一个方法?

我的代码:

protected override void button1_Paint(PaintEventArgs e) 
    { 
    } 

我得到这个错误:“没有找到合适的方法来覆盖”。

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

+0

重写的事件处理程序?这似乎是一件奇怪的事情......你试图完成什么? – Guffa 2009-06-04 11:35:25

+0

我在你的回答中提出了关于我想要完成的事情的评论。 – 2009-06-04 11:38:24

+1

请详细解释a)你想重写什么; b)你为什么要重写它?我感觉到问题的全部原因是你试图覆盖你不需要覆盖任何东西的地方。 – Sander 2009-06-04 12:12:54

回答

3

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

如果要影响该方法,请使用new关键字而不是override

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) 
    { 

    } 


} 
0

如果要在声明中基类virtual的方法能够覆盖它。

0

你重写来自其他类的方法。为了保持这个方法,你必须把它放在一个子类中并从那里调用它。

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

3

要重写的方法可能称为OnPaint,而不是button1_Paint。更改方法声明,所以它看起来是这样,而不是:

protected override void OnPaint(PaintEventArgs e) { } 

不过请注意,此代码应该是从要覆盖的方法的类的子类。如果您将此方法放置在一个表单中,它将处理该表单的绘画。

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