PDA

View Full Version : سوال: دسترسی به خواص یک فرم از یک فرم دیگر



Tiam121
یک شنبه 24 مرداد 1389, 11:47 صبح
سلام , من می خوام از یک فرم به یک فرم دیگه دسترسی داشته باشم, یعنی بعد از زدن یک دکمه توی فرم , بتونم دکمه های یک فرم دیگرو enable کنم , لطفاً راهنمایی کنین. ممنون

vandermond
یک شنبه 24 مرداد 1389, 11:54 صبح
دوست عزيز
بايد يك خاصيت public توي فرمي كه ميخاي تغييرات انجام بشه ايجاد كني و از فرم دوم اين خاصيت رو تغيير بدي و بعدش Enabled دكمه فرم اولت رو با اون خاصيت تغيير بدي.

amir_rtf
یک شنبه 24 مرداد 1389, 12:22 عصر
دوست عزیز میتونی یک classتعریف کنی و داخلش چند متغیر publicبزاری و از فرم اول آونارو ویرایش کنی:لبخند:

مهدی فرزاد
یک شنبه 24 مرداد 1389, 13:25 عصر
سلام
راه اول اينو ببينيد از اول تا آخرين پست
http://www.barnamenevis.org/forum/showthread.php?t=232835

راه دوم :همچنين فرم هاي شما خاصيتي به نام Owenr دارن كه از اون به شكل زير هم ميتوني استفاده كني
مثلا شما دو فرم داريد كه از فرم اول فرم دوم رو لود ميكنيد


Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();


و در حالا در فرم دوم هر جا خواستي از خواص فرم 1 استفاده كني مينويسي(مثلا ControlBox فرم 1)


this.Owner.ControlBox = false;

در انتهاي لينك قبل كه گذاشتم يه مثال هست دانلود كنيد و ببينيد چگونه بين دو UserControl ارتباط بر قرار شده (به وسيله Property) اين كار براي فرم ها هم امكان پذيره
البته مثال با WPf هست ولي كد نويسي اون برا ي ساخت Property با WinApp تفاوتي نداره
هردو با ‍C#‎‎‎‎ نوشته شده

zayens
یک شنبه 24 مرداد 1389, 13:27 عصر
چرا انقدر بحث را پیچیده میکنین؟
اصلا نیازی به تعریف کلاس مجزا نیست
از Mehdi550u ممنون

zayens
یک شنبه 24 مرداد 1389, 13:57 عصر
راه دوم :همچنين فرم هاي شما خاصيتي به نام Owenr دارن كه از اون به شكل زير هم ميتوني استفاده كني
مثلا شما دو فرم داريد كه از فرم اول فرم دوم رو لود ميكنيد


Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();


و در حالا در فرم دوم هر جا خواستي از خواص فرم 1 استفاده كني مينويسي(مثلا Textbox فرم 1)


this.Owner.textBox1.Text = "1234";


من از کد زیر در فرم 1 استفاده کردم


private void btnListFood_Click(object sender, EventArgs e)
{
frm2 myfrm2 = new frm2();
myfrm2.Owner = this;
myfrm2.Show();
}

و در frm2 هم از کد زیر استفاده کردم:


this.Owner.

که میخواستم در ادامه ی کد بالا
;button.enabled=false
را قرار بدم که button و هیچ یک از اجزای فرم 1 من در لیست نبود
آیا کار دیگه ای هم هست که باید انجام بشه یا اشتباهی در کد من رخ داده؟

مهدی فرزاد
یک شنبه 24 مرداد 1389, 14:22 عصر
من از کد زیر در فرم 1 استفاده کردم


privatevoid btnListFood_Click(object sender, EventArgs e)
{
frm2 myfrm2 = newfrm2();
myfrm2.Owner = this;
myfrm2.Show();
}

و در frm2 هم از کد زیر استفاده کردم:


this.Owner.

که میخواستم در ادامه ی کد بالا
;button.enabled=false
را قرار بدم که button و هیچ یک از اجزای فرم 1 من در لیست نبود
آیا کار دیگه ای هم هست که باید انجام بشه یا اشتباهی در کد من رخ داده؟

من بايد يك نكته رو اصلاح كنم و اون اينه كه شما با روش دوم فقط به خواص فرمتون دسترسي داريد.پس براي كنترل ها بهتره راه اول رو انجام بديد.مثالي كه گفتم ببيند

من الان يك مثال آماده ميكنم

صباح فتحی
یک شنبه 24 مرداد 1389, 14:33 عصر
اول خاصیت Modifires اون دکمه ای رو که میخوای Enable اش تغییر کنه رو Public کن .خب؟
بعد توی فرم دیگه مثلاform2 این کد رو بنویسی حله:
form1 frm=new form1();
frm.Button1.Enable-True;
همین!

vandermond
یک شنبه 24 مرداد 1389, 14:36 عصر
با خاصيت بايد اين كار رو بكنيد. (يه بار ديگه هم گفته بودم)
البته يه راه ديگه هم هست(البته براي عكس اين حالت) مثلا براي فرستادن تكست يك تكست باكس به فرم دوم ميتونيم از متد سازنده فرم 2 استفاده كنيم و براي اون يك Overload درست كنيم كه string بگيره و متن تكست باكس فرم اول رو بفرستيم بهش.هيچ ربطي به سوال اين تاپيك نداشت:لبخند:. محض اطلاع گفتم(گرچه شما اساتيد همه اينا رو بلديد:چشمک:)

vandermond
یک شنبه 24 مرداد 1389, 14:38 عصر
اول خاصیت Modifires اون دکمه ای رو که میخوای Enable اش تغییر کنه رو Public کن .خب؟
بعد توی فرم دیگه مثلاform2 این کد رو بنویسی حله:
form1 frm=new form1();
frm.Button1.Enable-True;
همین!
دوست عزيز
اولا كدت يه مشكل داره ميخايم از فرم دوم به اول بريم پس...
در ضمن اين كار اصلا اصولي نيست بلكه اصول شي گرايي رو از ريشه خراب ميكنه:متفکر:.

مهدی فرزاد
یک شنبه 24 مرداد 1389, 14:40 عصر
اول خاصیت Modifires اون دکمه ای رو که میخوای Enable اش تغییر کنه رو Public کن .خب؟
بعد توی فرم دیگه مثلاform2 این کد رو بنویسی حله:
form1 frm=new form1();
frm.Button1.Enable-True;
همین!

منظور دوستان اينه كه از فرم2 به فرم 1 كه باعث لود شدن فرم 2 بوده دست رسي پيدا كنيم

الان يك مثال ميگذارم



مثال با vs2010
براي همين كداش رو ميگذارم اگه كسي نداره ببينه چكار انجام شده

در اين مثال فرم 1 ،، فرم 2 رو لود ميكنه،، و با زدن دكمه فرم2 ،،button در فرم 1 Hide ميشه
كد Form1


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.OldForm = this;
f2.Show();
}
public bool HideBoutton
{
set
{
if (value == true)
{
button2.Hide();
}
}
}
}


كد form2

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
frm1.HideBoutton = true;
}
private Form1 frm1;
public Form1 OldForm
{

get {return frm1;}
set
{
frm1 = value;
}
}
}

صباح فتحی
یک شنبه 24 مرداد 1389, 22:11 عصر
بله حرف شماصحیحه من اصول شی گرایی رو رعایت که نکردم بلکه زدم وداغونش کردم:افسرده:
هدف من فقط دسترسی به کنترل یک فرم دیگه بود