帮助覆盖C#.NET

时间:2011-03-30 21:30:54

标签: c# override

我需要覆盖Tabcontrol GetTabRect。

  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

4 个答案:

答案 0 :(得分:4)

该方法是公开的。因此,当你覆盖它时,你不能保护它。所以你必须保持公众的可见度。

它应该是这样的:

public override Rectangle GetTabRect(int index)

答案 1 :(得分:2)

问题是你有效地使用覆盖功能隐藏了该功能。您需要保持函数的public性质,因为在覆盖方法时无法更改符号。

答案 2 :(得分:0)

您所获得的错误消息似乎清楚地表明您在覆盖该方法时无法限制/更改访问权限。 您可以将其覆盖为公共。 是否有特定原因要求您的GetTabRect需要受到保护?

答案 3 :(得分:0)

TabControl.GetTabRect()方法是公开的,并且它是非虚拟的,因此您可能需要找到解决您尝试解决的问题的不同解决方案。即使您使用new关键字覆盖此方法,基类仍然不会调用您的实现,因为它不是虚函数。

您可以尝试处理DrawItem事件并自己渲染标签 - 它可能更多工作,但它可以让您控制标签的呈现方式,然后您可以使用任何您想要的边界矩形。

你想要做什么,需要一个被覆盖的GetTabRect()方法?