PDA

View Full Version : گرفتن لیست فرم های موجود در برنامه



mehran_sh_t
یک شنبه 08 آبان 1390, 10:53 صبح
سلام
با چه کدی میشه لیستی از فرم های درون برنامه رو گرفت؟

کد زیر Application.OpenForms

فقط فرم هایی رو می ده که باز هستن!

Hajivandian
یک شنبه 08 آبان 1390, 11:05 صبح
سلام، دوست عزیز
توی ویژوال استادیو قابلیتی که بتونی لیسته همه فرم های پروژه رو بگیری وجود نداره و فقط می تونی لیست فرم های باز رو بگیری.
اما می تونی خودت قابلیتی طراحی کنی که لیست فرم های پروژرو بهت بده، که تو لینک زیر می تونی توضیحات بیشتری دربارش بخونی :

http://support.microsoft.com/kb/815707

mehran_sh_t
یک شنبه 08 آبان 1390, 11:24 صبح
ممنون
ولی من می خوام بدون اینکه شیئی از فرم ها بسازم اونها رو داشته باشم. در واقع type اونها رو

mehdi.mousavi
یک شنبه 08 آبان 1390, 12:04 عصر
سلام، دوست عزیز توی ویژوال استادیو قابلیتی که بتونی لیسته همه فرم های پروژه رو بگیری وجود نداره و فقط می تونی لیست فرم های باز رو بگیری.

سلام.
البته که وجود داره! برای گرفتن لیست کلیه کلاسهایی که از System.Windows.Forms.Form مشتق شده اند (به بیان دیگه کلیه Form های موجود در Assembly ی فعلی) و با فرض اینکه از LINQ استفاده کنیم، می تونیم بدین شکل عمل کنیم:


List<Type> types = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.BaseType.FullName == "System.Windows.Forms.Form").ToList();
foreach (Type type in types)
{
Form form = (Form)Activator.CreateInstance(type);
}

اینجا من ابتدا Type کلیه اون فرم ها رو در Assembly ی فعلی می گیرم، سپس در درون حلقه (فقط برای اینکه ببینید چطور میشه از روی Type کلاسی رو Instantiate کرد) یک Instance جدید از اون Form ایجاد کرده ام...

موفق باشید.

پاورقی: دقت کنید، استفاده از چنین روش هایی (و بطور کلی Reflection) سرعت کمی داره و شما قاعدتا میتونید مشکلتون رو با طراحی یک مدل مناسب حل کنید. روشی که گفتم رو بعنوان آخرین راه حل در نظر بگیرید.