PDA

View Full Version : تغییر آیتمهای یک فرم با توجه به اطلاعات فرم دیگر



mehdisiavashian
سه شنبه 17 مهر 1386, 08:05 صبح
با سلام- چگونه می توان آیتمهای یک کامبو باکس را با استفاده از اطلاعات وارد شده در یک فرم دیگر تغییر داد؟
مثال: در حال پر کردن اطلاعات یک فرد هستیم. در کامبو باکس ما شهر مورد نظر موجود نیست. برنامه این امکان را دارد که با کلیک بر دکمه ای فرم دیگری باز شود(به صورت dialogbox) و بتوان اطلاعات آن شهر را به بانک اطلاعاتی اضافه کرد. چگونه می توان بدون باز و بسته کردن فرم اول اطلاعات کامبو مربوط به شهر ها را رفرش کرد؟
با تشکر

hassan razavi
سه شنبه 17 مهر 1386, 08:17 صبح
اگه از Dataset استفاده کردید جهت نمایش اطلاعات Combo ، کافیه که در هنگام مورد نیاز Dataset را مجدد Fill کنید ولی اگه با کد آیتمهای Combo را Add کردید ، آیتمها را Clear و مجدد add کنید

mehdisiavashian
سه شنبه 17 مهر 1386, 08:24 صبح
با تشکر - ببینید با توجه به مثالی که گفتم،
اولا- فرم اول در هنگام باز شدن فرم دوم بسته نمی شود(تنها به صورت یک show.dialogbox() است)
دوما- اطلاعات کامبو را از یک دیتا ست می خوانم ولی تنها در زمان لود اولیه فرم.
سوما- چگونه می توان با بسته شدن یک فرم، یک متد را در فرم دیگر صدا زد؟ دقیقا می خواهم متدی بنویسم که با بسته شدن فرم دوم، این متد در فرم اول صدا زده شود و کامبو را دوباره پر کند

hassan razavi
سه شنبه 17 مهر 1386, 08:33 صبح
شما وقتی که ShowDialog را صدا می زنید ، برنامه روی همین خط میمونه تا فرم باز شده بسته شود. پس شما نی تونید بلافاصله بعد از دستئر ShowDialog ، تابعی را که اطلاعات Combo را پر دوباره میکنه را صدا زد

babak23
سه شنبه 17 مهر 1386, 08:40 صبح
با تشکر - ببینید با توجه به مثالی که گفتم،
اولا- فرم اول در هنگام باز شدن فرم دوم بسته نمی شود(تنها به صورت یک show.dialogbox() است)
دوما- اطلاعات کامبو را از یک دیتا ست می خوانم ولی تنها در زمان لود اولیه فرم.
سوما- چگونه می توان با بسته شدن یک فرم، یک متد را در فرم دیگر صدا زد؟ دقیقا می خواهم متدی بنویسم که با بسته شدن فرم دوم، این متد در فرم اول صدا زده شود و کامبو را دوباره پر کند

دقیقا همین مشکل را من تو برنامه هام دارم که البته با روشهایی تونستم بعضی از موارد را برطرف کنم .
سوال دوست ما سوال من هم هست آیا رویداد خاصی هست که بتوان با بسته شدن فرم دو در فرم یک آن را فراخوانی کرد و بعد تعقیرات را در فرم یک بدون اینکه فرم یک را مجددا باز بسته کنیم و یا مواردی مثل این دوباره مشاهده کرد(مشاهده ی تعقیرات فرم یک هنگام بسته شدن فرم دو )

mehdisiavashian
سه شنبه 17 مهر 1386, 08:42 صبح
شما وقتی که ShowDialog را صدا می زنید ، برنامه روی همین خط میمونه تا فرم باز شده بسته شود. پس شما نی تونید بلافاصله بعد از دستئر ShowDialog ، تابعی را که اطلاعات Combo را پر دوباره میکنه را صدا زد
این قبول من هم با تریس این مشکل رو فهمیدم ولی راه حل چیه؟ با توجه به صورت مسئله اولیه لطفا راه حل بدهید. با تشکر

smt_414
سه شنبه 17 مهر 1386, 10:59 صبح
سلام
اگه درست متوجه شده باشم
این مورد یعنی رفرش کردن فرم ، مدتی پیش برای خود من هم سوال بود که به جواب منطقی منتهی نشد



همونطور که گفتن
یه راه باز و بسته کردن فرم
به این صورت که در رویداد formclosing فرم 2 یه نمونه از فرم یک ساخته بشه خاصیت showintaskbar اون false باشه و بعد تابع مورد نظر در فرم یک فراخوانی شه و بعد هم فرمی که ساخته شده رو ببندیم

RED-C0DE
سه شنبه 17 مهر 1386, 15:26 عصر
من هم به چنین موردی قبلا برخورد کردم...اگه دیباگ کنی و بصورت خط به خط اجرا کنی متوجه می شی که من چی می گم...
وقتی که فرم دومت رو بصورت ShowDialog() فراخونی می کنی ، تا وقتی که دوباره فرم دومت بسته بشه ، توی فرم اول روی خط frm2.ShowDialog() می مونه...یعنی شما می تونی بلافاصله بعد از اینکه در فرم اولت نوشتی frm2.ShowDialog() ، دوباره داده های مربوط به ComboBox ات رو بروز کنی...
نیازی به کارای دیگه نیست...

PC2st
سه شنبه 17 مهر 1386, 20:33 عصر
سوما- چگونه می توان با بسته شدن یک فرم، یک متد را در فرم دیگر صدا زد؟ دقیقا می خواهم متدی بنویسم که با بسته شدن فرم دوم، این متد در فرم اول صدا زده شود و کامبو را دوباره پر کند
همانطور که RED-C0DE گفتند، وقتی از ShowDialog استفاده کنید نیازی به این کار نیست.
بهرحال اگر لازم بود:


Form2 frm = new Form2();
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed);
frm.Show();

که متد frm_FormClosed بصورت زیر تعریف شده و با بسته شدن فرم frm، اجرا میشه:


void frm_FormClosed(object sender, FormClosedEventArgs e)
{
...
}