PDA

View Full Version : تشخیص اینکه آیا فرم بازی وجود داره که پنهان باشه



bahar_engineer
یک شنبه 28 تیر 1388, 12:15 عصر
آیا با استفاده از این کد می شه تشخیص داد که فرمی هم که پنهان هست بازه ؟

تو برنامه من یه فرم باز هست که پنهانش کردم و با این کد خواستم چک کنم که اگه بازه اونو از حالت hidden خارج کنه و اگه بسته هست دوباره بازش کنه (اگه کاربر ثبت نام کنه و وارد بخش خودش بشه و دوباره بره یه نفر دیگه رو ثبت نام کنه (یعنی یه یوزر دیگه رو بخواد ثبت نام کنه) صفحه ثبت نام پس بازهست و چون وصله به صفحه اول نمی شه اونو close کنم و باید پنهانش کنم ... حالا کاربر بخواد نفر دوم رو ثبت نام کنه باید دوباره فرم hidden شده رو نمایش بدم)



foreach (Form arrange in Application.OpenForms)
{
if (arrange is arrangement)
اما خطا داد

اینم خطاش :


Collection was modified; enumeration operation may not execute.
و یه سوال دیگه : آیا فرمی که پنهانش کردم برای برگردوندنش باید form.show() بکار ببرم؟ یا راه دیگه ای داره که دوباره فضا نگیره؟

bahar_engineer
یک شنبه 28 تیر 1388, 16:13 عصر
کسی نبود بدونه این خطا برای چی اتفاق می افته ؟ رو فرم دیگه اینطوری نیست

رو این فرم خاص اینطوری خطا می ده

مفهوم خطا رو نمی دونین؟

Unknownlive
یک شنبه 28 تیر 1388, 19:06 عصر
خوب کاری نداره که،راه حل ساده است شما یه متغیر سراسری ایستا تعریف می کنید حالا می یاید وقتی فرم را می بندید قبلش عدد 0 را در متغیر قرار می دید اگر پنهان کردید 1 را بگذارید اگر فرم را باز کردید 2 و ... حالا حروقت خواستید وضعیت را بفهمید می تونید از if یا Switch استفاده کنید برای اسانی کار یک تابع بنویسید و ساختار تصمیم را در ان بگذارید

Reza_Yarahmadi
یک شنبه 28 تیر 1388, 22:01 عصر
من همین کد شما رو برای فرمی به نام Form2 امتحان کردم و مشکلی نداشت.
نمیدونم شما چطور فرمتون رو نمایش میدید و لی توی روش زیر دیگه شئ جدیدی از فرم ساخته نمیشه.

foreach (Form arrange in Application.OpenForms)
{
if (arrange is Form2)
Application.OpenForms["Form2"].Show();
}

mzalireza
دوشنبه 29 تیر 1388, 01:05 صبح
چرا میخواید که هر دفعه باز بودن فرم رو چک کنه؟!

من هم یه همچی مشکلی داشتم که اومدم دکمه × رو از روی فرم دوم برداشتم بجاش یه دکمه ok رو فرم2 گذاشتم که با زدن اون، فرم دومم رو hide میکرد. البته در داخل دستورات مربوط به دکمه ای که رو فرم اولی بود و کارش نشون دادن فرم2 بود تنها نوشته بودم :

f2.Show();
و شیء f2 رو خارج از رویداد Click ایجاد کرده بودم و user به راحتی میتونست بین این 2 فرم Switch کنه.
البته اگه بخوای ازاین روش استفاده کنی؛ یه رویداد هم باید برای بسته شدن فرم1 بنویسی که داخلش نوشته شده باشه:


Application.exit();
با این کار هرچی فرم باز باشه، مثل فرم2 اونها هم با بسته شدن فرم اصلی بسته میشن.

Mahdi.Kiani
دوشنبه 29 تیر 1388, 08:40 صبح
سلام
در Pattern ها، Pattern ای با نام سنگلتون وجود دارد.هدف اصلی این pattern ایجاد تنها یک نمونه از شی می باشد./
شما می توانید این Pattern را به نحوی تغییر دهید، تا اگر نمونه ای از فرمی ایجاد نشده است، آن را ایجاد و چنانچه نمونه ای از فرم وجود دارد، ان را active، Show و یا هر عملی دگیری که نیاز دارید انجام دهد./
در مورد سینگلتون و پیاده سازی آن به این لینک (http://www.yoda.arachsys.com/csharp/singleton.html)و این لینک (http://msdn.microsoft.com/en-us/library/ms998558.aspx) مراجعه کنید/
موفق باشید./