2009-06-04 74 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); 
    } 
}