PDA

View Full Version : فراخوانی روید load فرم اول در فرم دوم



abcd_a
جمعه 05 خرداد 1391, 14:33 عصر
سلام

چطوری می تونم رویداد load فرم اول را درون فرم دوم فراخوانی کنم ؟
با تشکر.

quantomquery
جمعه 05 خرداد 1391, 15:04 عصر
هرچی که تو لود نوشتی رو داخل یه زیر برنامه پابلیک بنویس بعد اونو فراخونی کن


application.openforms["formname"].procedurename();

بجای formname نام فرمت رو بنویس
بجای procedurename نام زیربرنامه رو بنویس

فقط یادت باشه که اون فرم از قبل باز شده باشه
اگه غلط املایی دارم شرمنده
همینطوری نوشتم

Mahmoud.Afrad
جمعه 05 خرداد 1391, 15:09 عصر
در فرم اول
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.Owner = this;
frm2.Show();
}

private void Form1_Load(object sender, EventArgs e)
{
//code ...
}


protected internal void eventForm1Load()
{
Form1_Load(null, null);
}

در فرم دوم
((Form1)this.Owner).eventForm1Load();

abcd_a
جمعه 05 خرداد 1391, 20:45 عصر
با تشکر از دوستانی که پاسخ دادند

من یکسری اطلاعات از طریق فرم سوم اضافه میکنم، یعنی بعد رفتن به فرم دوم از طریق فرم دوم به فرم سوم می رم و یکسری داده ها را اضافه می کنم. می خوام زمانی که در فرم سوم هستم هم مثل فرم دوم رویداد لود فرم اول را فراخوانی کنم .

به طور خلاصه ایا امکان داره رویداد load یک فرم را درون فرم دلخواه فراخوانی کرد؟

Mahmoud.Afrad
جمعه 05 خرداد 1391, 22:27 عصر
در پست 3 منظورم از فرم دوم هر فرمی میتونه باشه فرقی نداره به شرطی که owner رو فرم اول تنظیم بشه.

omran.av
جمعه 05 خرداد 1391, 23:56 عصر
سلام
رویداد فرم لود به طور پیش فرض به صورت private تعریف میشه.شما private رو تبدیل کنید به Public بعد تو هر فرمی که خواستید یه شی از نوع فرم یک بسازید و رویداد فرم لود رو فراخوانی کنید.
مثلا:
public void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("aaaaaaaa");
}
بعد تو دوم یا هر فرمی که خواستید مثل کد زیر عمل کنید:
private void button1_Click(object sender, EventArgs e)
{
using (Form1 frm = new Form1())
{
frm.Form1_Load(sender, e);
}
}
البته روش زیاد اصولی نیست ولی فکر کنم کارتون رو راه بندازه.

Mahmoud.Afrad
شنبه 06 خرداد 1391, 01:12 صبح
سلام
رویداد فرم لود به طور پیش فرض به صورت private تعریف میشه.شما private رو تبدیل کنید به Public بعد تو هر فرمی که خواستید یه شی از نوع فرم یک بسازید و رویداد فرم لود رو فراخوانی کنید.
مثلا:
public void Form1_Load(object sender, EventArgs e)
{
MessageBox.Show("aaaaaaaa");
}
بعد تو دوم یا هر فرمی که خواستید مثل کد زیر عمل کنید:
private void button1_Click(object sender, EventArgs e)
{
using (Form1 frm = new Form1())
{
frm.Form1_Load(sender, e);
}
}
البته روش زیاد اصولی نیست ولی فکر کنم کارتون رو راه بندازه.
فراخوانی مجدد رویداد یک فرم زمانی مفید هست که شئ ای از فرم قبلا موجود باشه و بخواهیم رویداد این شئ رو فراخوانی کنیم مثلا لودفرم تا فرم به حالت اول برگرده. ایجاد شئ جدید و فراخوانی رویداد اون تاثیری رو شئ دیگری از همون فرم که قبلا ایجاد شده نداره.

abcd_a
شنبه 06 خرداد 1391, 10:26 صبح
سلام با تشکر از دوستان
من درون فرم اول Owner فرم سوم یا فرم دلخواه را تنظیم می کنم ولی زمان استفاده از فرم سوم با error مواجه می شم .لازم به ذکر است که در فرم اول فرم سوم show نمی شود.

در فرم اول به صورت زیر تنظیم می کنم
frmNew frm = new frmNew();
frm.Owner = this;
در فرم مقصد هم به همون صورتی که گفتید یعنی:

((Form1)this.Owner).eventForm1Load();

omran.av
شنبه 06 خرداد 1391, 15:09 عصر
اگه یکم بیشتر در مورد کد برنامه تون توضیح بدید مثلا چرا فرم لود رو میخواین فراخوانی کنید شاید بهتر بتونم کمکتون کنم.
چرا واسه برنامه تون از دلیگیت استفاده نمی کنید . با دلیگیت خیلی راحت میشه بین فرم های برنامه ارتباط برقرار کرد.

abcd_a
شنبه 06 خرداد 1391, 16:02 عصر
اگه یکم بیشتر در مورد کد برنامه تون توضیح بدید مثلا چرا فرم لود رو میخواین فراخوانی کنید شاید بهتر بتونم کمکتون کنم.
چرا واسه برنامه تون از دلیگیت استفاده نمی کنید . با دلیگیت خیلی راحت میشه بین فرم های برنامه ارتباط برقرار کرد.
سلام
با تشکر از همه دوستان
برای رفرش کردن مجبور نباشم فرم اصلی را برای باز و بسته کنم یا یک دکمه اضافی روی فرم اصلی بزارم و رویداد لود درونش فراخوانی کنم تا فرم رفرش بشه .
در مورد برنامه: من در فرم اصلی تعداد زیادی label دارم زمانی که با استفاده از فرم دوم داده های را ثبت می کنم که باید یک سری محاسبات درونشون نمایش داده بشه . با استفاه از فرم سومی که در فرم دوم فراخوانی میشه باید یکسری داده های مرتبط با داده های قبلی که در فرم دوم ثبت شده اضافه کنم که نتبجه درون فرم اصلی نمایش داده بشه .
در مورد دلیگیت هم من آشتای کمی دارم اگه یه مثال با دلیگیت در مورد کار با رویداد ها ی فرم بزنید ممنون میشم .

Mahmoud.Afrad
شنبه 06 خرداد 1391, 21:10 عصر
کد پست شماره2 را هم امتحان کنید.

omran.av
یک شنبه 07 خرداد 1391, 00:38 صبح
سلام
ببخشد خودم وقت نکردم واستون مثال بنویسم ولی شما اگه عبارت Passing Data Between Forms رو تو گوگل سرچ کنید مثال های خوبی رو براتون میاره.
تو سایت CodeProject هم چند تا مثال هست که می تونید استفاده کنید.

abcd_a
یک شنبه 07 خرداد 1391, 14:41 عصر
هرچی که تو لود نوشتی رو داخل یه زیر برنامه پابلیک بنویس بعد اونو فراخونی کن


application.openforms["formname"].procedurename();

بجای formname نام فرمت رو بنویس
بجای procedurename نام زیربرنامه رو بنویس

فقط یادت باشه که اون فرم از قبل باز شده باشه
اگه غلط املایی دارم شرمنده
همینطوری نوشتم
ضمن تشکر از دوستان

زیر برنامه را که من بصورت public در فرم اصلی تعریف می کنم در جای که می خوام فراخوانی کنم با این syntax قابل شناسای نیست
لازم به ذکر است که تابع درست تعریف شده چون زمانی که یک شی از روی فرم می سازم قابل دسترسی است.

omran.av
یک شنبه 07 خرداد 1391, 21:23 عصر
سلام
الان یه روشی به ذهنم رسید واست یه برنامه کوچیک نوشتم دانلود کن ببین با این روش مشکلت حل میشه.
اگه نتونستی باهاش کارکنی یا کدشو متوجه نشدی بگو تا واست توضیحش بدم.
تو این روش هرچندتا فرم داشته باشی مهم نیست چو به خود شی فرمی که میخوای دسترسی پیدا میکنی.

abcd_a
دوشنبه 08 خرداد 1391, 13:03 عصر
سلام
الان یه روشی به ذهنم رسید واست یه برنامه کوچیک نوشتم دانلود کن ببین با این روش مشکلت حل میشه.
اگه نتونستی باهاش کارکنی یا کدشو متوجه نشدی بگو تا واست توضیحش بدم.
تو این روش هرچندتا فرم داشته باشی مهم نیست چو به خود شی فرمی که میخوای دسترسی پیدا میکنی.

ضمن تشکر از تمام دوستانی که در این مبحث شرکت کردند و کمک کردند.
مثال خیلی خوبی بود تو برنامه از اون استفاده کردم .من این کد را از شما یاد گرفتم با تشکر فروان.