PDA

View Full Version : سوال: مقدار بازگشی برای فرم



fool66
شنبه 25 خرداد 1392, 23:06 عصر
سلام دوستان من می خواستم برای یه فرم توی برنامم یه مقدار بازگشتی بزارم ( مثل تابع ) که وقتی فرم بسته شد یه مقداری رو به فرم که درون اون باز شده برگردونه ممنون میشم راهنماییم کنید

alexmcse
شنبه 25 خرداد 1392, 23:23 عصر
عزیز مثال بزن

fool66
یک شنبه 26 خرداد 1392, 00:55 صبح
می خوام وقتی توی فرم 1 فرم دو رو show می کنم بعد از بسته شدن فرم 2 یه مقدار به فرم 1 ارسال بشه

khokhan
یک شنبه 26 خرداد 1392, 01:15 صبح
می خوام وقتی توی فرم 1 فرم دو رو show می کنم بعد از بسته شدن فرم 2 یه مقدار به فرم 1 ارسال بشه
در فرم والد رویداد فرم فرزند رو نمونه سازی می کنی :


public partial class Parent : Form
{
ChildForm childForm = null;

public Parent()
{
InitializeComponent();

childForm = new ChildForm();
childForm.SomeEvent += new SomeEventHandler(childForm_SomeEvent);

textBox1.Text = "";
}

void childForm_SomeEvent(object sender, EventArgs e)
{
textBox1.Text = "Child Form Closed";
}

private void button1_Click(object sender, EventArgs e)
{
childForm.Show();
}
}

بعد می آیی در فرم فرزند در رویداد closeاون نمونه ای رو که در والد ایجاد کردی فعال می کنی :


public delegate void SomeEventHandler(object sender, EventArgs e);

public partial class ChildForm : Form
{
//event is defined here
public event SomeEventHandler SomeEvent;

public ChildForm()
{
InitializeComponent();
}

private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
SomeEvent(sender, e);
}
}

tooraj_azizi_1035
یک شنبه 26 خرداد 1392, 11:32 صبح
و راهی کم هزینه تر با Property:

//In Form1's button handler
using(Form2 form2 = new Form2())
{
if(form2.ShowDialog() == DialogResult.OK)
{
someControlOnForm1.Text = form2.TheValue;
}
}

And...

//In Form2

//Create a public property to serve the value
public string TheValue
{
get { return someTextBoxOnForm2.Text; }
}

fool66
یک شنبه 26 خرداد 1392, 13:31 عصر
و راهی کم هزینه تر با Property:

//In Form1's button handler
using(Form2 form2 = new Form2())
{
if(form2.ShowDialog() == DialogResult.OK)
{
someControlOnForm1.Text = form2.TheValue;
}
}

And...

//In Form2

//Create a public property to serve the value
public string TheValue
{
get { return someTextBoxOnForm2.Text; }
}



someControlOnForm1 این یه تکست باکسه درسته؟؟؟؟

tooraj_azizi_1035
یک شنبه 26 خرداد 1392, 14:55 عصر
الزاماً نه اما می تونه باشه.

fool66
یک شنبه 26 خرداد 1392, 15:06 عصر
کار نمی کنه!!!!!!!!!!!!
105639

tooraj_azizi_1035
یک شنبه 26 خرداد 1392, 15:09 عصر
چه خطایی میده؟

fool66
یک شنبه 26 خرداد 1392, 15:12 عصر
خطا نمیده ولی مقدار رو هم ارسال نمی کنه

گذاشتم می تونی ببینی

veniz2008
یک شنبه 26 خرداد 1392, 15:19 عصر
سلام.
یه راهش اینه :
در partial مربوط به فرم 2 که قراره مقدار رو برای فرم 1 بفرسته یک متغیر استاتیک تعریف کن :

public static string flag;
در رویداد Form Closing مربوط به همین فرم 2 کد زیر رو قرار بدید (مقداری رو که دوست دارید برگشت بدید داخل متغیر flag قرار بدید. البته اجباری ندارید که حتما از رویداد form closing استفاده کنید. میتونید هر جا که دوس داشتید این متغیر رو مقدار دهی کنید.) :

flag = "this is a test";
در فرم 1 که فرم والد شماست هم فرم2 رو بصورت زیر صدا بزنید :

Form2 f2 = new Form2();
f2.ShowDialog();
//
MessageBox.Show(Form2.flag);
موفق باشید.

khokhan
یک شنبه 26 خرداد 1392, 17:35 عصر
خطا نمیده ولی مقدار رو هم ارسال نمی کنه

گذاشتم می تونی ببینی
.................................................. ..............!!!!!!!!!!!

fool66
یک شنبه 26 خرداد 1392, 17:53 عصر
.................................................. ..............!!!!!!!!!!!

دقیقا برعکس اینو می خوام که از فرم فرزند به والد ارسال بشه

khokhan
یک شنبه 26 خرداد 1392, 18:01 عصر
دقیقا برعکس اینو می خوام که از فرم فرزند به والد ارسال بشه
عزیز محتوای فرم 1 رو با اونی که در فرم2 هست عوض کن با یه تغییر بسیار جزئی :لبخند:

khokhan
یک شنبه 26 خرداد 1392, 18:09 عصر
بفرما

این هم برعکس ، :لبخند:اونی که برعکس اینه