ความช่วยเหลือในการเอาชนะ C# .NET

ฉันต้องแทนที่ 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

person Ste    schedule 30.03.2011    source แหล่งที่มา
comment
วิธีการนี้ไม่ได้ทำเครื่องหมายเป็น virtual ดังนั้นคุณจึงไม่สามารถแทนที่ได้ (โดยไม่คำนึงถึงตัวดัดแปลงการเข้าถึง)   -  person BrokenGlass    schedule 31.03.2011
comment
@Ste: มันไม่ได้ตั้งใจที่จะถูกแทนที่   -  person BrokenGlass    schedule 31.03.2011
comment
เขาไม่สามารถใช้ GetTabRect สี่เหลี่ยมผืนผ้าใหม่สาธารณะ (ดัชนี int) ได้หรือไม่   -  person RoflcoptrException    schedule 31.03.2011
comment
@Roflcoptr: นั่นจะ ซ่อน วิธีคลาสพื้นฐาน แต่ไม่ แทนที่ นั่นหมายความว่าหากคุณเข้าถึงคลาสของเขาด้วยการอ้างอิงที่พิมพ์ไปยังคลาสฐาน วิธีคลาสฐาน จะยังคงดำเนินการ   -  person BrokenGlass    schedule 31.03.2011


คำตอบ (4)


วิธีการ TabControl.GetTabRect() เป็นแบบสาธารณะและไม่ใช่แบบเสมือน ดังนั้นคุณอาจต้องค้นหาวิธีแก้ไขปัญหาอื่นที่คุณพยายามแก้ไข แม้ว่าคุณจะแทนที่เมธอดนี้โดยใช้คีย์เวิร์ด new คลาสฐานก็จะไม่เรียกการใช้งานของคุณเนื่องจากไม่ใช่ฟังก์ชันเสมือน

คุณสามารถลองจัดการเหตุการณ์ DrawItem และเรนเดอร์แท็บด้วยตัวเอง มันอาจจะได้ผลมากกว่า แต่มันช่วยให้คุณควบคุมวิธีเรนเดอร์แท็บ จากนั้นคุณสามารถใช้สี่เหลี่ยมที่มีขอบเขตใดๆ ที่คุณต้องการได้

คุณกำลังพยายามทำอะไรที่ต้องใช้วิธี GetTabRect() ที่ถูกแทนที่?

person xxbbcc    schedule 30.03.2011

วิธีการเป็นแบบสาธารณะ ดังนั้นคุณไม่สามารถป้องกันได้เมื่อคุณเอาชนะมัน ดังนั้นคุณต้องรักษาการมองเห็นของสาธารณะ

มันควรมีลักษณะเช่นนี้:

public override Rectangle GetTabRect(int index)
person RoflcoptrException    schedule 30.03.2011
comment
+1 แน่นอน และโค้ดที่พูดก็หมายความว่ามี public override Rectangle GetTabRect(int index) - person Shadow Wizard Wearing Mask V2; 31.03.2011
comment
ไชโย ต้องจำไว้ว่าสิ่งที่ชัดเจนเหล่านั้นไม่ได้ชัดเจนสำหรับทุกคน :-) - person Shadow Wizard Wearing Mask V2; 31.03.2011

ปัญหาคือคุณกำลังซ่อนฟังก์ชันด้วยการแทนที่ของคุณอย่างมีประสิทธิภาพ คุณต้องรักษาลักษณะ public ของฟังก์ชันไว้ เนื่องจากคุณไม่สามารถเปลี่ยนลายเซ็นได้เมื่อคุณแทนที่วิธีการ

person Aren    schedule 30.03.2011

ดูเหมือนว่าข้อความแสดงข้อผิดพลาดที่คุณได้รับจะระบุอย่างชัดเจนว่าคุณไม่สามารถจำกัด/เปลี่ยนแปลงการเข้าถึงได้เมื่อคุณแทนที่วิธีการนี้ คุณสามารถแทนที่เป็นสาธารณะได้ มีเหตุผลเฉพาะเจาะจงว่าทำไมคุณถึงต้องการให้ GetTabRect ของคุณได้รับการปกป้องหรือไม่?

person Sabitha    schedule 30.03.2011