PDA

View Full Version : سوال: نمایش مقدار متغییر یک فرم در فرم دیگر



gissoft
شنبه 06 شهریور 1389, 14:57 عصر
سلام
من دو تا فرم ایجاد کرده ام که توی فرم اولی یک متغییر رو تعریف و مقدار دهی نیز کردم حالا میخام مقدار این متغییر تو فرم دوم نمایش بدم لازم به ذکر که فرم دوم در فرم اول New شده و فرم اول به صورت زیر اجرا شده و هیچ اسمی نداره
Application.Run(new Form1());

cheshm6k
شنبه 06 شهریور 1389, 16:14 عصر
سلام

متغیرتو static تعریف کن


static public int i=1000;

حالا تو فرم دومت با این دستور بهش دسترسی داری


int j=ّForm1.i;

مهدی فرزاد
شنبه 06 شهریور 1389, 16:16 عصر
سلام
در این مورد قبلا مفصل گفتگو شده سرچ کنید
دو راه داری

راه اول
شما باید از خواص(Property) استفاده کنید
مثلا در فرم دوم مینویسید

private string _str;
public string Mystr
{
get { return _str; }
set { _str = value; }
}
این ساده ترین حالت تعریف خواص (Proprty) می باشد
و بعد در فرم اول هنگام لود فرم دوم مینویسی


Form2 f2 = new Form2();
f2.Mystr = متغییر مورد نظر
f2.ShowDialog();

حالا توی فرم 2 هر جا خواستی از این متغییر استفاده کنی مثلا مینویسی

textbox1.Text = this.Mystr;

راه دوم

توی فرم دوم مینویسی

private string _str;
public Form2(string str)
{
InitializeComponent();
_str = str;
}
و هنگام لود فرم دو

Form2 f2 = new Form2(متغییر فرم 1 رو اینجا بنویس)
f2.ShowDialog();

و در فرم 2 هرجا خواستی از متغغیر استفاده کنی مینویسی مثلا


textbox1.Text = _str;

من راه اول رو ترجیح میدم

mmd2009
شنبه 06 شهریور 1389, 19:34 عصر
با سلام.

البته راه های زیادی هست. و پراپریتی شاید راحت ترین کار و حداقل اصولی ترینشون باشه.

میلاد قاضی پور
شنبه 06 شهریور 1389, 21:48 عصر
مشکل پراپرتی ها اینه که از فرم دومی به اولی نمیشه مقداری رو ارسال کرد و باید از روش دوم استفاد کرد. البته میشه ولی کمی پیچیده هست . مثلا برای ارسال مقدار از فرم دوم به اولی علاوه بر روش دوم که دوستمون گفتن میشه از این روش هم استفاده کرد .


//برای فرم دوم یک پراپرتی از نوع فرم اول تعریف میکنیم

Form1 f1;
public form1 F1
{
get {return f1;}
set{f1=value;}
}

//در فرم اول برای اینکه در فرم دوم به کنترلهای اول دسترسی داشته باشیم مینویسیم
Form2 f2=new Form2();
f2.F1=this;



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

mmd2009
شنبه 06 شهریور 1389, 22:05 عصر
سلام به دوست عزیزم اوج بلند

به نظر من ارسال مقدار ار فرم دو به یک با استفاده از پراپریتی اسونه. مثال زیر رو ببینید.

میلاد قاضی پور
شنبه 06 شهریور 1389, 22:12 عصر
بهههههه .سلام . مرسی . اما من گفتم دوم به اول .اونم به خاطر اینکه کاربرا عادت دارن همیشه از فرم ها نمونه بسازن . حالا یه کاربر میاد میفته تو فرم دوم حالا میخواد به فرم اول دسترسی داشته باشه فکر میکنه بازم باید ازش نمونه گیری کنه . اینجاش یه خورده پیچیده میشه . اینو میگم چون بعد از یکسال از آشنایی با سیشارپ هنوز نمیدونستم از فرم دوم چطوری باید به فرم اول مقداری فرستاد .

vandermond
شنبه 06 شهریور 1389, 22:47 عصر
دوست عزيز
و سي شارپ ، Application.OpenForms را نيز آفريد...

Application.OpenForms["Form1"].PropertyName = "...";
فكر نميكنم توضيح اضافه اي نياز باشه:چشمک:

mmd2009
شنبه 06 شهریور 1389, 22:48 عصر
ببخشید این مثالی که من زدم از فرم دو به فرم یک هست. اشتباه تایپی بود

arefba
شنبه 06 شهریور 1389, 22:50 عصر
سلام

متغیرتو static تعریف کن


static public int i=1000;حالا تو فرم دومت با این دستور بهش دسترسی داری


int j=ّForm1.i;

البته تو کد فرم دومت میشه نوشت form1. اسم متغیری که تو فرم یک تعریف کردی

مهدی فرزاد
شنبه 06 شهریور 1389, 22:55 عصر
بهههههه .سلام . مرسی . اما من گفتم دوم به اول .اونم به خاطر اینکه کاربرا عادت دارن همیشه از فرم ها نمونه بسازن . حالا یه کاربر میاد میفته تو فرم دوم حالا میخواد به فرم اول دسترسی داشته باشه فکر میکنه بازم باید ازش نمونه گیری کنه . اینجاش یه خورده پیچیده میشه . اینو میگم چون بعد از یکسال از آشنایی با سیشارپ هنوز نمیدونستم از فرم دوم چطوری باید به فرم اول مقداری فرستاد .

سلام من جواب این رو چند جا دادم
دسترسی از فرم 2 به فرم 1 با استفاده از Property
این رو ببینید
http://www.barnamenevis.org/forum/showthread.php?t=239955&page=2

میلاد قاضی پور
شنبه 06 شهریور 1389, 23:16 عصر
میدونم عزیز منم بلد هستم فقط خواستم اینجا هم ذکر کرده باشم . وندرموند عزیز دوستان حرفه ای تر از اون روش ایراد میگیرند .