PDA

View Full Version : نام فرم به عنوان پارامتر



Maryam mohseni
دوشنبه 23 مرداد 1385, 09:38 صبح
سلام
من توی همه فرمهام یه پروسیجر به اسم CheckEmpty دارم که کار خالی کردن textbox ها و بقیه کنترلهارو بعد از درج یا ویرایش داره.
حالا می خوام توی یه کلاس این پروسیجر رو صدا کنم. و نام فرم رو به عنوان پارامتر به این کلاس بفرستم . توی vb6 می شد نام فرم رو به عنوان پارامتر بگیری و هر بلایی دلت می خواست تو همه ماژولها روی اجزای اون فرم در بیاری.
ولی تو 2005 هر کاری میکنم قبول نمی کنه . خط زیر داره نام فرم رو توی یکی از متدهای کلاس به عنوان پارامتر میگیره :
Public Sub InsertRecord( ByVal EnabledStatus As Boolean, ByVal FormName As Form)

If FormName.CheckEmpty = False Then Exit Sub
و برای استفاده از این متد :
InsertRecClass.InsertRecord( True, FrmActivity)
ولی خطای زیر رو ازم می گیره :
'CheckEmpty' is not a member of 'System.Windows.Forms.Form'.
یا این خنگ که نمی بینه من دارم قبلش نام فرم رو پاس میکنم یا من بلد نیستم.

ممنون میشم راهنمایی کنید

ghafoori
دوشنبه 23 مرداد 1385, 10:08 صبح
دوست عزیز معلومه که اشکال میگیرد شما نباید FormName از نوع فرم در نظر بگیرید باید از نوع فرمی باشد که این متد در ان تعریف شده باشد نوع پایه فرم که این متد را ندارد

Maryam mohseni
دوشنبه 23 مرداد 1385, 11:12 صبح
دوست عزیز معلومه که اشکال میگیرد شما نباید FormName از نوع فرم در نظر بگیرید باید از نوع فرمی باشد که این متد در ان تعریف شده باشد نوع پایه فرم که این متد را ندارد
آخه اگر بخوام اسم فرمی که این متد رو توی اون نوشتم صدا کنم که بر می گردم سر جای اولم .من می خوام این متد رو که توی همه فرمهام هست و یک نام هم داره ولی کارشون با هم فرق داره توی یه کلاس صدا بزنم شما چه راهی پیشنهاد می کنید .

ghafoori
دوشنبه 23 مرداد 1385, 21:40 عصر
اگر این راه حل را نمی پسندید من تنها این فکر بنظرم میرسد و ان را امتحان کردم یک فرم پایه درست کردم که یک تابع دارد حالا تمام فرمهای من از ان فرم به ارث میرسد و هرکدام ان تابع را override کردن حالا در هر کلاسی می توانم از ان متد استفاده کنم این هم یک مثال
4626
پیشنهاد می کنم دررابطه شی گرایی در وی بی دات نت مطالعه بیشتری بکنید ان چیزی که در وی بی 6 بکار می بردید خلاف شی گرایی و وی بی دات نت ان را قبول نمی کند شاید فکر کنید کار سختتر شده اما وقتی دقیق بشید می بینید چه قدرتی به شما میدهد

Maryam mohseni
سه شنبه 24 مرداد 1385, 13:45 عصر
اگر این راه حل را نمی پسندید من تنها این فکر بنظرم میرسد و ان را امتحان کردم یک فرم پایه درست کردم که یک تابع دارد حالا تمام فرمهای من از ان فرم به ارث میرسد و هرکدام ان تابع را override کردن حالا در هر کلاسی می توانم از ان متد استفاده کنم این هم یک مثال
4626
پیشنهاد می کنم دررابطه شی گرایی در وی بی دات نت مطالعه بیشتری بکنید ان چیزی که در وی بی 6 بکار می بردید خلاف شی گرایی و وی بی دات نت ان را قبول نمی کند شاید فکر کنید کار سختتر شده اما وقتی دقیق بشید می بینید چه قدرتی به شما میدهد

سلام
مرسی از کمکتون
سعی کردم چیزی که شما فرموده بودید رو تو برنامه پیاده کنم اما موفق نشدم . چند تا خطا داد.
من جمله این که من توی فرمهام نمی تونستم متد مورد نظر رو override کنم. خطای زیر رو میده :
function 'CheckEmpty' cannot be declared 'Overrides' because it does not override a function in a base class.

در حالی که توی یه کلاس دیگه تعریف کرده بودم که می خوام این متد رو باز نویسی کنم :


Public Class myform
Inherits Windows.Forms.Form
Public Overridable Function CheckEmpty() As Boolean
End Function
End Class

ghafoori
سه شنبه 24 مرداد 1385, 17:33 عصر
ایا شما تمام فرمهایتان از myform به ارث رسیده یا در هنگام کامپایل به متد شما در کلاس پایه هشداری میدهد نه اخطار

Maryam mohseni
چهارشنبه 25 مرداد 1385, 14:12 عصر
ایا شما تمام فرمهایتان از myform به ارث رسیده یا در هنگام کامپایل به متد شما در کلاس پایه هشداری میدهد نه اخطار


سلام
همه فرمهای من از myform به ارث نرسیده . چون توی همه اونا نمی خوام این متد رو ovverride کنم .
این error هم که میده مانع اجرای برنامه میشه پس قاعدتا نباید هشدار باشه .
مرسی از کمکتون