PDA

View Full Version : سوال: فراخوانی تابعی از فرم دیگر



darkdays2010
سه شنبه 10 فروردین 1389, 09:50 صبح
سلام
فرض کنید دو فرم داریم:form1,form2
توی فرم1 چند تا textbox و یا هز کنترل دیگه ای وجود داره. ما توی فرم1 یه تابع داریم مثل init که مقداردهی میکنه این کنترلها رو. یه دکمه هم داریم که با زدنش فرم2 باز میشه. میخوام از داخل فرم2 بتونم اون تابع init که داخل فرم1 تعریف شده رو فراخوانی بکنم و نتیجه اجرای تابع رو درحالی که هردو فرم باز هستند ببینم.
دوستان لطفا کمک برسونید
مرسی

exlord
سه شنبه 10 فروردین 1389, 10:06 صبح
تو فرم 2 :

public Form1 frm1 { get; set; }
private void Form2_Load(object sender, EventArgs e)
{
frm1.initMe();
}


تو فرم 1 :

private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.frm1 = this;
frm2.Show();
}

mrsalam
سه شنبه 10 فروردین 1389, 12:20 عصر
شما می توانید آن متد را بصورت Static معرفی کنید، مثال:

{

public Static bool Test()
{
return true;
}

نحوه فراخانی:
Form1.Test(); (بدون Instance)

asefy2008
سه شنبه 10 فروردین 1389, 13:05 عصر
سلام دوست عزیز فکر کنم این کاری که شما می خواهید انجام بدید شی گرایی رو نقض کنه.
از کلاس استفاده کن یا از get , set.
البته بازم بزرگان نظر بدن بهتره شاید اشتباه می کنم.

Amir Oveisi
سه شنبه 10 فروردین 1389, 14:12 عصر
تو فرم 2 :

public Form1 frm1 { get; set; }
private void Form2_Load(object sender, EventArgs e)
{
frm1.initMe();
}


تو فرم 1 :

private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.frm1 = this;
frm2.Show();
}


شما می توانید آن متد را بصورت Static معرفی کنید، مثال:

{

public Static bool Test()
{
return true;
}

نحوه فراخانی:
Form1.Test(); (بدون Instance)

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

جواب سوالتون:
خود .net برای حل این مسئله به شیوه ای کاملا اصولی اومده از الگوی Singletone (http://en.wikipedia.org/wiki/Singleton_pattern)در کلاس Application استفاده کرده.
فرض کنید کلاس اول Form1 و کلاس دوم Form2 نام دارند. اسم شی ای که از Form1 ساخته شده رو هم form1 و اسم شی فرم دوم رو form2 در نظر می گیریم.
حالا برای دسترسی به فیلد های form1 از داخل form2 (حتی فیلد های private) به این طریق در هر جا از form2 که لازم بود عمل می کنیم:
((Application.OpenForms["form1"] as Form1).Controls["textBox1"] as TextBox).Text = "hello";


اگر سوالی پیش اومد لطفا جستجو کنید و از ایجاد تاپیک جدید خودداری نمایید.

موفق باشید