PDA

View Full Version : مشکل در پاس دادن یک مقدار در فرم



reza11_2005
چهارشنبه 19 خرداد 1395, 00:32 صبح
با سلام
من یک فرم دارم

فرم 1---> فرم 2 را به از دستور ShowDialog(); برای باز کردن این فرم استفاده می کنم
حالا می خواهم مقداری که در فرم 2 است به فرم یک انقال بدهم
هر کاری می کنم و از رو های گفته شده استفاده می کنم باز این مقدار به فرم 1 پاس نمی دهد
ممنون می شوم دوستان راهنمایی کنند

barnamenevisjavan
چهارشنبه 19 خرداد 1395, 12:51 عصر
با سلام
من یک فرم دارم

فرم 1---> فرم 2 را به از دستور ShowDialog(); برای باز کردن این فرم استفاده می کنم
حالا می خواهم مقداری که در فرم 2 است به فرم یک انقال بدهم
هر کاری می کنم و از رو های گفته شده استفاده می کنم باز این مقدار به فرم 1 پاس نمی دهد
ممنون می شوم دوستان راهنمایی کنند
سلام باید Modifier اون کنترل رو Public کنی تا از فرم دیگه بهش دسترسی داشته باشی (البته این روش برای فرم 1 به 2 کار میکنه)
برای فرم 2 به یک به این صورت عمل کنید :
ابتدا یه تابع مثل زیر بسازید (فرم 1)
private void Id_DatagridCell(string Id)
{
txtname.Text = Id;
}
جایی که کلیک میکنید و فرم 2 رو باز می کنید کد زیر رو قرار بدید
Form2 su = new Form2 ();
su.DataGridCell += new Action<string>(Id_DatagridCell);

su.ShowDialog();

در فرم 2 متغیر زیر رو تعریف کنید.
public event Action<string> DataGridCell;

هرجایی که مدنظرتون بود.
var CurrentRowIndex ="test";

درنهایت کد زیر رو ادامش بنویسید
DataGridCell(CurrentRowIndex);
this.Close();

به همین سادگی اطلاعات به فرم 1 ارسال میشن

csharpcollegian
چهارشنبه 19 خرداد 1395, 14:03 عصر
سلام باید Modifier اون کنترل رو Public کنی تا از فرم دیگه بهش دسترسی داشته باشی (البته این روش برای فرم 1 به 2 کار میکنه)
برای فرم 2 به یک به این صورت عمل کنید :
در مثال زیر من میخام اطلاعات یکی از فیلدهای دیتاگرید در فرم 2 به تکسباکس در فرم 1 ریخته بشه.
ابتدا یه تابع مثل زیر بسازید (فرم 1)
private void Id_DatagridCell(string Id) // انتخاب مقدار دیتاگریدویو و ریختن در تکست باکس
{
txtname.Text = Id;
}
جایی که کلیک میکنید و فرم 2 رو باز می کنید کد زیر رو قرار بدید
Form2 su = new Form2 ();
su.DataGridCell += new Action<string>(Id_DatagridCell);

su.ShowDialog();

در فرم 2 متغیر زیر رو تعریف کنید.
public event Action<string> DataGridCell;

هرجایی که مدنظرتون بود با کد زیر اطلاعات فیلد آیدی رو از گرید ویو دریافت کنید.
var CurrentRowIndex = datagridview[0, datagridview.CurrentRow.Index].Value.ToString(); //گرفتن آیدی

درنهایت کد زیر رو ادامش بنویسید
DataGridCell(CurrentRowIndex);
this.Close();

به همین سادگی اطلاعات به فرم 1 ارسال میشن

سلام
دوست عزیز میشه مرحله به مرحله توضیح بدید دقیقا چی کار کردید ؟
خیلی ممنون

محمد آشتیانی
چهارشنبه 19 خرداد 1395, 14:55 عصر
سلام
خیلی ساده تر از اینهاست

کد فرم 1

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
using (var form = new Form2())
{
form.ShowDialog();
label1.Text = form.CustomProperty;
}
}
}


کد فرم 2

public partial class Form2 : Form
{
public string CustomProperty { get; private set; }
public Form2()
{
CustomProperty = string.Empty;
InitializeComponent();
}


private void button1_Click(object sender, EventArgs e)
{
//اینجا پراپرتی را مقدار دهی می کنید
CustomProperty = textBox1.Text;
Close();
}
}


داستان هم این است که روی button1 از فرم یک کلیک می کنید ، فرم 2 باز میشود ، داخل textbox1 در فرم دو مقداری وارد می کنید و button1 از فرم 2 رو کلیک می کنید ، مقدار تکست باکس در لیبل فرم یک نمایش داده میشه.





موفق باشید.

ebrahim.rayatparvar
پنج شنبه 20 خرداد 1395, 17:37 عصر
میتونی از متغیر استاتیک هم استفاده کنی ولی پیشنهاد میکنم که روش آقای آشتیانی رو انجام بدی.