2011-03-30 63 views
1

我需要重寫Tabcontrol GetTabRect。重寫C#.NET的幫助

protected override Rectangle GetTabRect(int index) 
    {...} 

我收到此錯誤

錯誤1 'TabControl.GetTabRect(INT)': 當 中重寫 '公共' 繼承的成員 「不能改變訪問修飾符System.Windows.Forms.TabControl .GetTabRect(INT) '

Error2'TabControl.GetTabRect(INT)': 不能重寫繼承構件 'System.Windows.Forms.TabControl.GetTabRect(int)的' ,因爲它沒有標明虛擬,抽象 ,或覆蓋

我怎樣才能做到這一點?

編輯

如果我使用市民:

TabControl.GetTabRect(int)': cannot override inherited member 'System.Windows.Forms.TabControl.GetTabRect(int)' because it is not marked virtual, abstract, or override 
+1

該方法未標記爲「虛擬」,因此您無法覆蓋它(不管訪問修飾符) – BrokenGlass 2011-03-30 21:34:31

+0

有一種方法? – Ste 2011-03-30 21:35:37

+0

@Ste:這並不意味着被覆蓋 – BrokenGlass 2011-03-30 21:37:27

回答

0

TabControl.GetTabRect()方法是公開的,它是非虛擬的,因此您可能需要爲您嘗試解決的問題找到不同的解決方案。即使使用new關鍵字覆蓋此方法,基類仍然不會調用您的實現,因爲它不是虛函數。

你可以嘗試處理DrawItem事件並自己渲染選項卡 - 它可能會做更多的工作,但它可以讓你控制如何渲染選項卡,然後你可以使用任何你想要的邊界矩形。

你想要做什麼,需要重寫GetTabRect()方法?

4

的方法是公開的。所以當你壓倒它時你無法保護它。所以你必須保持公衆的知名度。

它應該是這樣的:

public override Rectangle GetTabRect(int index) 
+1

+1當然和說明代碼明智的意思是有'公共覆蓋Rectangle GetTabRect(int索引)' – 2011-03-30 21:34:54

+0

是的。我補充一點。感謝 – RoflcoptrException 2011-03-30 21:35:44

+0

歡呼聲,需要記住那些明顯的東西對大家都不明顯。 :-) – 2011-03-30 21:38:00

2

的問題是,你正在有效地隱藏你的覆蓋功能。您需要維護函數的性質,因爲在重寫方法時無法更改標誌。

0

您收到的錯誤消息似乎清楚地表明,您在重寫該方法時無法限制/更改訪問權限。 您可以將其覆蓋爲Public。 爲什麼你希望你的GetTabRect需要被保護是否有特定的原因?