PDA

View Full Version : سوال: مشکل در استفاده از سرویس abstract در کلاس های فرم



rainlover
پنج شنبه 09 مهر 1388, 09:28 صبح
با سلام و احترام
من یه فرم پایه دارم می خوام اون رو abstract کنم. وقتی این کارو میکنم و یه کلاس فرم دیگه رو از اون مشتق می کنم designer فرم مشتق میره و به جاش چنین خطایی چاپ میشه که البته معنیشو میدونم
The designer must create an instance of type 'MySelf.BaseForm' but it cannot because the type is declared as abstract.
سوال اینه که این کجا داره یه object از کلاس پایه میسازه و من کلا برای اینکه این مشکل رو حل کنم باید چی کار کنم؟
تکرار میکنم: Designer فرم مشتق موقع desing time میره و یه خطا جاش میاد
ممنون

rainlover
یک شنبه 12 مهر 1388, 07:47 صبح
دوستان لطف کنند از کمک کردن دریغ نکنند:افسرده:

اَرژنگ
یک شنبه 12 مهر 1388, 12:28 عصر
دوستان لطف کنند از کمک کردن دریغ نکنند:افسرده:
بدانه داشتن کد کمک کردن سخت است، ولی این را امتحان کنید
۱.فرم پایه‌تان را ابسترکت نکنید. IDE در زمان دیزاین سعی میکنه یک نمونه درست کند، یا اینکه
۲.یک فرم که ابسترکت نیست و از فرم ابسترکت ارث بری میکنه بسازید، و در بقیه فرمها از اون ارث بری کنید

ولی ، معمولا روشهایه ارث بری ویژوال بیشتر دردسر درست میکنند تا حل کنند، بستگی به مشکلی که میخواهید حل کنید ممکن است بیلدر پترن بیستر به کارتان بیاد تا ارث بری از یک فرم پایه.

چکار میخواهید انجام بدید که لازم دارید فرم پایه ابسترکت باشه؟

alireza_tavakol
یک شنبه 12 مهر 1388, 14:34 عصر
مشکلی که گفتید رو من چک کردم و واسه منم جای سوال بود:گیج:

این پست رو ثبت کردم که یه موقع فکر نکنید VS خرابه

ولی در حد یک پیشنهاد : شما اگه کلاس فرم پایه رو abstract تعریف نکنید این مشکل پیش نماید و برای رفع این مشکل می تونید از اینترفیس ها استفاده کنید.

لطفا" اگه فهمیدید مشکل از کجاست و توانسید مشکل رو حل کنید نتیجه کارکردتون رو اینجا ثبت کنید...

rainlover
دوشنبه 13 مهر 1388, 22:25 عصر
۱.فرم پایه‌تان را ابسترکت نکنید. IDE در زمان دیزاین سعی میکنه یک نمونه درست کند، یا اینکه
۲.یک فرم که ابسترکت نیست و از فرم ابسترکت ارث بری میکنه بسازید، و در بقیه فرمها از اون ارث بری کنید
چکار میخواهید انجام بدید که لازم دارید فرم پایه ابسترکت باشه؟
جواب سوال اول:
1. این که من از abstract کردن فرم و کاری که میخام کنم منصرف شم راه حل نیست. پاک کردن صورت مساله است.
2. هر فرمی که از یک فرم abstract مشتق بشه به همون مشکل دچار میشه و لذا نمی توان در این کار جلو تر رفت.

البته لازم به تذکره که میشه فرم رو abstract نکنم و بعد از طراحی کامل اون، این کارو کنم. و اتفاقا بدون مشکل اجرا میشه اما همون طور که گفتم این راه حل نیست و یه جوری دور زدنه
حتما برای این قابلیت راه حلی وجود داره
یا علی مدد

JaguarXF
سه شنبه 14 مهر 1388, 04:50 صبح
توی تو سه تا لینک اول از نتیجه سرج "گوگل" ، رسیدم به اینجا:
http://social.msdn.microsoft.com/forums/en-US/csharpide/thread/797222f5-4bd3-409c-9283-89a98f5a0953/
که داخل گفتگوهاشون یه راه ساده برای حل مشکل گفته بود و یک لینک هم داده بود برای راه حل پایه ای تر . که اینجا بود : سورس کدش رو هم گذاشته

http://www.urbanpotato.net/default.aspx/document/2001

اَرژنگ
سه شنبه 14 مهر 1388, 06:14 صبح
جواب سوال اول:
1. این که من از abstract کردن فرم و کاری که میخام کنم منصرف شم راه حل نیست. پاک کردن صورت مساله است.
2. هر فرمی که از یک فرم abstract مشتق بشه به همون مشکل دچار میشه و لذا نمی توان در این کار جلو تر رفت.

البته لازم به تذکره که میشه فرم رو abstract نکنم و بعد از طراحی کامل اون، این کارو کنم. و اتفاقا بدون مشکل اجرا میشه اما همون طور که گفتم این راه حل نیست و یه جوری دور زدنه
حتما برای این قابلیت راه حلی وجود داره
یا علی مدد

۱ینکه میگید پاک کردن صورت مسئله هست، به این بکته توجح کنید که مشکل واقعی چی هست؟ با اینکار چی را میخواهید پیاده کنید، و اینکه ویژوال اینکار را ساپورت نمیکنه و مقدار مشکلاتی که باید حل کنید ممکن است بیشتر میشه. و شما هیچ کنترلی به اینکه ویژوال استودیو چطوری با این کارتان برخورد کنه ندارید. پس به جایه اینکه از یک روشی که ساپورت ندارد استفاده بشه، بهتر نیست از یک روشی که اشکالات کمتری داشته بشه استفاده بشه؟ بر طبقه آنجه جگوار فرستاد تک ترفندی هست که بشه ولی به این نکته در سایت توجه کنید: Note: While this is a cool and funky example of the power you wield with custom type description providers, Microsoft doesn't support abstract base classes in the designer, so if you use this technique in your own code, you are on your own. اگر از این روش استفاده کنید و به مشکلی بر بخورید تنها میمانید.