PDA

View Full Version : نمونه برنامه ساده از ژنریک سینگلتون



bahar_engineer
سه شنبه 27 مرداد 1388, 09:58 صبح
سلام

من از سینگلتون می خوام استفاده کنم برای اینکه فرم هام فقط یک بار باز بشن و هر بار فقط فراخوانی بشن

از همون الگوی ژنریک سینگلتون که توی نمونه برنامه های مفید در همین تالار بود استفاده کردم اما باهاش مشکل دارم

اگه ممکنه یه نمونه برنامه با همون ژنریک سینگلتون برام بذارین ... که شامل مثلاً 3 فرم باشه که هر کدوم رو توی دیگری باز کنه و ببنده و از هر فرم هم بخصوص فرم مادر فقط یک نمونه ساخته بشه

در واقع می خوام بدونم با سینگلتون چطور فرم فرزند که باز می شه فرم مادر رو ببندم یا hide کنم و دوباره موقع بستن فرم فرزند چطور فرم مادر رو فراخوانی کنم و نمایش بدم...

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

فقط 3 تا فرم باشه که با ژنریک سینگلتون باز و بسته بشن ... در هر زمان هم فقط یک فرم توی برنامه باز باشه یعنی بقیه که نیازی به اونها نیست بسته بشن یا در صورت لزوم hide بشن

ممنون و سپاسگزار:خجالت:

اینم کد ژنریک سینگلتون (http://barnamenevis.org/forum/showpost.php?p=472281&postcount=99)

لطفاً از همین کد استفاده کنین

bahar_engineer
سه شنبه 27 مرداد 1388, 15:44 عصر
اینو ببینین . مشکل من اینه خودتون برنامه رو اجرا کنین متوجه می شین

فرم مادر می افته زیر فرم اصلیه برنامه بعد از برگشت به اون

و اگه هم با سینگلتون درست کار کنه بار دوم که می خوام فرم فرزند رو که یک بار باز شده و بسته شده دوباره باز کنم خطا می ده که نمی تونه فرمی رو که dispose شده رو دوباره باز کنه


Cannot access a disposed object.
Object name: 'puzzle'.


البته این در صورتی هست که کد رویداد کلیک رفتن به صفحه پازل رو در صفحه hobby به این شکل بنویسم :



private void button1_Click(object sender, EventArgs e)
{
this.Close();
puzzle puz = GenericSingleton<puzzle>.GetInstance();
puz.Show();
}

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

پازل بوسیله سینگلتون باز و بسته می شه و فرم دیگه یعنی ترانه ها به حالت عادی close می شه

اصلاً هر کاری که می کنم این فرم ها درست بار گذاری نمی شن ... این مدتهاست که مشکل منه و به عناوین مختلف مطرحش کردم و به شکلهای مختلف روش کار کردم اما به نتیجه نرسیدم

لطفاً شما هم بررسی کنین

bahar_engineer
سه شنبه 27 مرداد 1388, 17:30 عصر
اینطوری حلش کردم (به ضمیمه رجوع کنید)

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



this.Close();
foreach (Form myhobby in Application.OpenForms)
{
if (myhobby is hobby)
Application.OpenForms["hobby"].Show();
}


واسه کسانی که دنبال جواب این تاپیک می گردن

اینطوری مشکل پدر فرزندی هم که مدتها داشتم حل شد:لبخندساده:

Amir Oveisi
چهارشنبه 28 مرداد 1388, 03:28 صبح
در واقع باز هم از الگوی Singleton استفاده کردید چون Application.OpenForms نیز با استفاده از این الگو دسترسی به قرم های برنامه رو امکان پذیر میکنه و معمولا هم بهترین گزینه برای انجام این کارها استفاده از همین روش هست.

bahar_engineer
چهارشنبه 28 مرداد 1388, 09:50 صبح
در واقع باز هم از الگوی Singleton استفاده کردید چون Application.OpenForms نیز با استفاده از این الگو دسترسی به قرم های برنامه رو امکان پذیر میکنه و معمولا هم بهترین گزینه برای انجام این کارها استفاده از همین روش هست.

بله من هم گفتم که از سینگلتون استفاده کردم ...
توی سورس برنامه مشخصه از کلاس Generic singleton استفاده شده...

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

دوستانی بودند که این مشکل رو داشتن .. امیدوارم این تاپیک کمکشون کنه