PDA

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



bitroo
جمعه 21 شهریور 1393, 22:24 عصر
سلام
من تو پروژه ام دو تا فرم دارم که یکی فرم اصلی و دیگری فرم فرعی هست.
در فرم فرعی وقت دکمه OK رو فشار میدم. فرم فرعی باید بسته بشه و فرم اصلی بیاد و تحلیل کنه که در فرم فرعی چه چیز هایی وارد کردم و چه اتفاقی افتاد.
یه فکر کردم: یه تایمر در فرم اصلی بگذارم که هر timeout بیاد و فشرده شدن دکمه OK رو بررسی کنه
اما این تایمر از سرعت برنامه کم می کنه.
می خوام یه تابع توی فرم اصلی بسازم و از طریق فرم فرعی(هنگام فشرده شدن کلید OK) فراخوانی بشه
اما این مسئله رو نتوسنتم انجام بدم.
چی کار کنم؟
چه راه حلی پیشنهاد می کنید؟

Mahmoud.Afrad
جمعه 21 شهریور 1393, 22:29 عصر
از یکی از موارد متد پابلیک، دلیگت، رویداد، پراپرتی و ... میتونید استفاده کنید.

plus
جمعه 21 شهریور 1393, 22:36 عصر
اگه هنگام کار با فرم فرعی، لازم نیست که کاربر با فرم اصلی کار کنه، فرم فرعی رو به صورت ShowDialog نمایش بدین.در این حالت، اجرا در فرم اصلی موقع نمایش فرم فرعی منتظر میمونه تا فرم فرعی بسته بشه:

// Form1
using (Form2 form2 = new Form2()) {
if (DialogResult.OK == form2.ShowDialog()) {
// Perform processing
}
}
// Form2:
private void button1_Click(object sender, EventArgs e) {
// ..
// ..
this.DialogResult = DialogResult.OK;
}

ولی اگه قرار هست کاربر به طور همزمان با هر دو فرم کار کنه، موقع قبل از نمایش فرم فرعی، رویداد FormClosed اون رو استفاده کنید:

// Form1
Form2 form2 = new Form2();
form2.FormClosed += new FormClosedEventHandler (form2_FormClosed);
form2.Show();
//
//
private void form2_FormClosed(object sender, FormClosedEventHandler e) {
Form form2 = (Form)sender;
if (DialogResult.OK == form2.DialogResult) {
// Perform processing
}
}
// Form2:
private void button1_Click(object sender, EventArgs e) {
// ..
// ..
this.DialogResult = DialogResult.OK;
}