سلام
واژه proytected کلمه سطح دسترسی است
Private کوچکترین محدوده0دسترسی محلی و فقط از داخل ماژول
Protected دسترسی از داخل ماژول و کلیه کلاسسهای وراثتی
Friend دسترسی در داخل کل اسمبلی یا پروژه جاری
Friend Protected دسترسی در کل اسمبلی جاری و کلاسسهای وراثتی خارج اسمبلی جاری
Public بزرگترین محدوده-دسترسی کامل از داخل و خارج پروژه و هر نقطه


و کلمه کلیدی Overrides برای تعریف یک متد جدید به جای متد مشابه در کلاسس مشتق شده اجرا میشود.


در مثال جاری فرم (و کلیه کنترلرها) دارای متد OnPaint هستند و شما با دستور Overrides متد OnPaint جدید خود را جای قبلی تعویض میکنید و دیگر از هر جا درخواستی برای OnPaint فرم صادر شود به جای کد اصلی و بومی کلاسس پایه (در اینجا کد مایکروسافت) کد شمات اجرا میشود، این خیلی کلی تر و پایه ای تر از رویداد Paint است.

اصلاً دستوری که موجب وقوع رویداد Paint میشود خود در متد OnPaint کلاسس پایه وجود دارد و به طور مثال اگر شما متد را به این شیوه خودتان Override بکنید دیگر رویداد Paint کلاً از کار می افتد، چون رویداد مذکور در کد بومی OnPaint اصلی فراخانی میشود و اتفاق می افتد.
و چون شما متد فوق را Override کرده اید کد اصلی که شامل دستورات پرتاپ رویداد Paint هم است دیگر اجرا نمیشود و کلاً هیچ چیزی در روی فرم بجز کد شما رسم نمیشود!


البته یک کلمه کلیدی بسیار مفید دیگر هم داریم که اجازه میدهد در Override متدها به صورت کنترل شده کد بومی و قبلی موجود را هم اجرا کنید. این کلمه MyBase است.

مثلاً کد زیر

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
'.... Drawing
MyBase.OnPaint(e)
End Sub


اول دستورات ترسیمی شما را انجام میدهد و بعد کنترل را به کلاسس پایه میدهد تا آن هم کد پیشین و اصلی خود را اجرا کنید، بدین ترتیب با وجود Override متد OnPaint کد قبلی هم اجرا میشود و رویداد Paint هم کار خواهد کرد.

البته اینکه در چه نقطه ای کد پایه فراخانی ود به برنامه بستگی دارد، شاید شما بخواهید اول تصویر کلاسس پایه ترسیم شود و بعد شما رویش چیزی جدید اضافه و رسم کنید، در این حالت کد فراخانی متد قدیمی پایه باید اولین خط باشد و....


این ها همه داستان سرایی کردم تا شاید فرق متد OnPaint و رویداد Paint و مباحث مشابه را متوجه شوید و بدانید وظیفه هر یک چیست.
باز هم مشکلی داشتید بگویید.