PDA

View Full Version : سوال در مورد وراثت



reza_Nazem
جمعه 19 شهریور 1389, 00:16 صبح
با سلام
من یک فرم(form1) دارم که روش یک دکمه است یک سری کار ها در event کلیک این دکمه نوشته ام و برای keyup فرم هم نوشته ام که اگر کلید خاصی(f12) زده شد دقیقا event کلیک اون دکمه اجرا شود

حال یک فرم دیگر (form2) دارم که از این فرم(FORM1) به ارث برده شده در فرم فرزند(form2) در EVENT کلیک همان دکمه یک سری کد جدید اضافه کردم حال وقتی در فرم فرزند روی دکمه کلیک می کنم هم کد فرم پدر اجرا می شود و هم کد فرم فرزند ، ولی وقتی در فرم فرزند کلید F12 رو می زنم فقط کد فرم پدر اجرا می شود

1 - علت این مشکل چیه ؟
2 - چه طوری میشه مشکل را حل کرد؟

میلاد قاضی پور
جمعه 19 شهریور 1389, 00:52 صبح
خب شما چون کدی برای اینکار ننوشتید و دستی رفتید از منوی موجود در ایونت کی آپ دستورات موس کلیک رو فراخوانی کردید این اتفقا باید هم بیفته . جهت جلوگیری میتونید دستورات موجود در کلیک فرم اول رو در یک تابع بریزید و در کی آپ فرم اولتون هم فراخوانی کنید اون تابع رو . اینجوری توی فرم فرزند هم میتونه اجرا بشه .
کلا روش انتخاب دستورات از لیست یک ایونت جهت تخصیص به ایونت دیگر روش درستی فکر نکنم باشه .

afsharjowkar
شنبه 20 شهریور 1389, 16:22 عصر
فکر کنم اگه بشه بهتره توی فرم اول متد رو virtual تعریف کنید و بعد اوی فرم دوم یعنی مشتق شده متد رو ovverride کنید اینجوری هر متد رفتار خاص اون کلاس رو داره

C Sharp
یک شنبه 21 شهریور 1389, 08:34 صبح
متاسفانه دلایلی که دوستان آوردن درست نیست

وقتی یک شی میخواد ایجاد بشه ، اول سازنده کلاس پدر فراخوانی میشه و بعد سازنده فرزند

وقتی شما تو فرم پدر برای رویداد دکمه هندلری تعریف میکنین ، کد مربوط به اون تو متد InitializeComponents فرم پدر ایجاد میشه که این متد داخل سازنده فرم پدر فراخوانی میشه

وقتی شما تو فرم فرزند برای رویداد دکمه هندلری تعریف میکنید ، ایندفعه کد مربوط به اون تو متد InitializeComponent قرار میگیره اما تو فرم فرزند

حالا مشکل از اینجا ناشی میشه که این متدها تو سازنده ها قرار دارن و وقتی شما میخواید از فرم فرزند شی بسازین ، اول سازنده فرم پدر و به تبع اون اول متد InitializeComponent از فرم پدر و بعد سازنده فرم فرزند و InitializeComponent فرزند فراخوانی میشه ، در نتیجه واسه رویداد دکمه دو هندلر معرفی میشه