PDA

View Full Version : فعال كردن فرمي كه باز است



beno2009
دوشنبه 09 مرداد 1391, 15:05 عصر
سلام بچه ها
من يه برنامه دارم در زمينه اتوماسيون اداري آموزشگاه هاي زبان.در قسمت تشكيل كلاس من بايد دانش آموزان رو از فرم ثبت نام به فرم تشكيل كلاس ببرم.براي اينكار بايد بين فرم ها اطلاعات تك به تك منتقل بشه.بدون بستن فرم ها.ولي من وقتي اين كارو ميكنم يه شي جديد از فرم ميسازه.اين برام مشكل ساز شده.
لطفا بچه ها كمك كنن مشكلم حل شه
با تشكر

the king
دوشنبه 09 مرداد 1391, 17:11 عصر
سلام بچه ها
من يه برنامه دارم در زمينه اتوماسيون اداري آموزشگاه هاي زبان.در قسمت تشكيل كلاس من بايد دانش آموزان رو از فرم ثبت نام به فرم تشكيل كلاس ببرم.براي اينكار بايد بين فرم ها اطلاعات تك به تك منتقل بشه.بدون بستن فرم ها.ولي من وقتي اين كارو ميكنم يه شي جديد از فرم ميسازه.اين برام مشكل ساز شده.
لطفا بچه ها كمك كنن مشكلم حل شه
با تشكر
لابد هر بار با new یک فرم جدید می سازید. شما اون کدی که شبیه به ()Form1 f1 = new Form1 است رو بکار نبرید بجای اینو بنویسید :

Program.CreateShowForm(typeof(Form1));


و سپس کد Program.cs رو باز کنید و متد CreateShowForm رو داخل کلاس اش اضافه کنید :

public static Form CreateShowForm(Type formType)
{
Form target = null;
foreach (Form f in Application.OpenForms)
{
if (f.GetType() == formType)
{
target = f;
break;
}
}
if (target == null)
{
target = (Form)formType.GetConstructor(new Type[0]).Invoke(null);
}
target.Show();
target.Activate();
return target;
}


متد CreateShowForm اگه لازم باشه فرم رو می سازه و اگه موجود باشه فعال می کنه و نشون میده.

sirvan-me
دوشنبه 09 مرداد 1391, 17:56 عصر
if (target == null)
{
target = (Form)formType.GetConstructor(new Type[0]).Invoke(null);
}


میشه در مورد این بخش کد توضیح کامل بدین ..... ممنون

the king
سه شنبه 10 مرداد 1391, 00:04 صبح
میشه در مورد این بخش کد توضیح کامل بدین ..... ممنون

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

if (target == null)


سازنده کلاسی که از نوع formType هست رو دریافت کن، آن سازنده ای که پارامتر ورودی نداره (یک آرایه با طول 0)، مثلا ()new Form سازنده ای یه که
پارامتر نداره، چون داخل () چیزی نیست.

formType.GetConstructor(new Type[0])


و به اون سازنده بگو یک نمونه شیء جدید از اون نوع formType بسازه، چون پارامتر ورودی نداره null می دهیم :

.Invoke(null);


و نمونه فرم جدیدی که ساخته شد را در target قرار می دهیم :

target = (Form)

beno2009
سه شنبه 10 مرداد 1391, 18:53 عصر
دستت درد نكنه اين 50% قضيه هست مساله فقط اكتيويت كردن نيست . من ميخام متن مثلا يك تكست باكس رو از فرم 1به متن تكست باكس ديگه در فرم 2 ببره و با اين كار اكتيويت بشه؟ لطفا راهنمايي كنيد
با تشكر

ali_habibi1384
سه شنبه 10 مرداد 1391, 21:21 عصر
اگر از فرم پدر ميخواي ببري به فرزند كه آبجكتش رو داري فقط كافيه تكست باكس رو توي فرم فرزند عمومي تعريف كني بعدشم از فرم پدر مقدار رو بخوني و پاس بدي:


formfarzand frm = new formfarzanf();
frm.text1.text=this.text1.text;
frm.show();

beno2009
چهارشنبه 11 مرداد 1391, 00:10 صبح
90576نميدونم عكس خواناست يا نه؟

فرید نجفلو
چهارشنبه 11 مرداد 1391, 00:29 صبح
دوست عزیز فکرکنم شما به ShowDialog فرم دوم نیاز داشته باشید
یعنی شما فرم دوم رو به صورت دیالوگ فراخوانی می کنید و بعد از بسته شدن فرم گرید انتخاب شده رو بررسی می کنید
البته شما باشد از فرم دوم یک نمونه جدید واسه اون دکمه بسازید ( و اصول کار هم همینه) و گرنه اگه بخواید دو تا فرم بدون هیچ رابطه ای باهم به همدیگه کمک کنن علاوه بر این که کار رو بدون روال درست اون انجام دادید ، خودتون رو هم بی جهت به زحمت می ندازید!