PDA

View Full Version : سوال: دسترسی به فرم دیگر (متغیر یا تکست)



sinashahab
چهارشنبه 21 اسفند 1387, 13:59 عصر
سلام
چگونه میشه به اجزای فرم دیگر تو پروژمون دسترسی داشته باشیم ؟
مثل متغیر یا لیبل .
یادم هست که تو ویبی به راهتی می شد .
ممنون میشم زود جواب بدین .

hana2064
چهارشنبه 21 اسفند 1387, 14:21 عصر
اگه یه سرچ ناقابلم میزدین بد نبود


form_shoma fsh=new form_shoma();
fsh.labele1.text.....

sinashahab
پنج شنبه 22 اسفند 1387, 10:56 صبح
سلام
ولی این فقط برای خواندن هست ولی مثلا بخوای لیست رو Clear کنی نمیشه .
فقط در این حد می دونم که باید لیست رو publiic کنم .
ممنون .

corona
پنج شنبه 22 اسفند 1387, 11:15 صبح
خوب دوست من برای این کار همون طور که خودت گفتی باید اون کنترلی در فرم فعلی که می خوای از توی فرم دیگه بتونی پاکش کنی رو public تعریف کنی . و یک رفرنس از فرم فعلی رو به فرم دیگه وقتی که اون نمایش میدی پاس بدی ، بعد دیگه حله .توی برنامه ای که ضمیمه کردم همه چی مشخصه .

sinashahab
پنج شنبه 22 اسفند 1387, 11:59 صبح
نه منظور من این بود که item های لیست رو پاک کنم .
هر کاری می کنم نمیشه .
ممنون میشم زود کمک کنید .

corona
پنج شنبه 22 اسفند 1387, 12:32 عصر
خوب دوست من فرقی نمی کنه . وقتی شما تو فرم دیگه به کنترلهای فرم اصلی دسترسی داشته باشی همه کار میتونی باهاشون انجام بدی . حالا مثلا برای پاک کردن محتویات یک لیست باکس که تو فرم اصلیت هست و مقدار داخلش داره کافیه تو همین برنامه ای که گذاشتم تو رویداد button1_Click فرم دوم این تکه کد رو هم اضافه کنی :



f.listBox1.Items.Clear();

sinashahab
پنج شنبه 22 اسفند 1387, 12:49 عصر
خوب من هم همین کد رو نوشتم ولی پاک نمیشه .
ممنون .

hasan_esfahan
پنج شنبه 22 اسفند 1387, 14:49 عصر
دوست عزیز من فقط دو تا نکته می گم
- این که خاصیت modifire شی شما باید public باشه و دوم این که


f.listBox1.Items.Clear();

باید قبل از


f.show()

باشه

sinashahab
پنج شنبه 22 اسفند 1387, 16:22 عصر
دوست عزیز من فرم اولم باز هست و بعد دومی رو باز می کنم و بعد می خواهم از دومی لیست فرم اول رو پاک کنم .
ممنون میشم اگه قبل از کد گذاشتن یه تست بزنی .

hasan_esfahan
پنج شنبه 22 اسفند 1387, 17:12 عصر
دوست عزیز ابتدا کامل توضیح دهید تا به جواب سریع برسید
برای این کار مثلا در قسمت public فرم کد زیر را درج کنید


static public ListBox l1;

خوب حالا در لود فرم ایجاد و به فرم اضافه کنید


l1 = new ListBox();
this.Controls.Add(l1);
l1.Items.Add("asd");


و در اخر از فرم دوم ان را خالی کنید


Form1.l1.Items.Clear();

دلیل این کار اینه که متغیر نوع استاتیک را تا زمان اجرای برنامه زنده هست و مشه بهش دسترسی داشت

mostafaaa
پنج شنبه 22 اسفند 1387, 20:00 عصر
سلام دوست من
ایده ای که دوستمون corona (http://barnamenevis.org/forum/member.php?u=38135) پیشنهاد دادن، ایده درستیه که میتونه مشکلتون رو حل کنه ، ولیکن میتونید به جای اینکه فرم اولتون رو با استفاده از constructor به فرم دوم پاس بدین از مشخصه Owner فرم ها تون استفاده کنید به این شکل :

private void button1_Click(object sender, EventArgs e)
{
Form2 F = new Form2();
F.Owner = this;
F.Show();
}
و در فرم دوم برای پاک کردن لیست باکس مربوطه داریم .

private void button1_Click(object sender, EventArgs e)
{
((ListBox)this.Owner.Controls["ListBox1"]).Items.Clear();
}
یا علی

mtaboy
جمعه 23 اسفند 1387, 01:55 صبح
آقا جواب داد. میشه در مورد کد یه توضیح کوچیک بدید...من در مورد owner چیزی نمیدونم...

shervin_agh67
دوشنبه 26 اسفند 1387, 00:42 صبح
قبلا برای اینکه ما به فرم اولی در فرم دومی دسترسی داشته باشیم و یا به اصطلاح ریسمان زمان اجرای اون رو داشته باشیم باید هندل فرم رو به فرم دومی پاس می دادیم و اونجا ازش استفاده می کردیم ولی باowner دیگه نیازی به این کار نیست چون خودش این کار رو برات انجام میده . البته در حالتی که برنامه رو با چند ریسمان می نویسید و صفحات در ریسمان های مختلف اجرا میشن شکل دسترسیتون باید با delegate بشه که شما با این مساله برخورد نمی کنید .

shervin_agh67
دوشنبه 26 اسفند 1387, 00:58 صبح
البته می دونی مشکل این حالت چیه ؟ TypeChecking نداره . و خطاهای زمان اجراش زیاده .
شما برای اینکه به عنصر موجود در صفحه اول دسترسی داشته باشی باید اسم اون کنترل رو به صورت رشته بنویسی که در زمان اجرای برنامه بررسی میشه . و اینکه برای تبدیل نوعها هم در زمان اجرا می فهمه که قابل تبدیل نیست . بهتره کد رو به این صورت بنویسی :
فرم اولت رو به همون صورت بالا انجام بده و در فرم دوم برای پاک کردن :



{
Form1 frm = new Form1();
frm = (Form1)this.Owner;
frm.ListBox1.Items.Clear();
}

البته باید کنترلت رو به صورت public تعریف کنی .

elmira_63
سه شنبه 03 شهریور 1388, 15:41 عصر
سلام دوست من
ایده ای که دوستمون corona (http://barnamenevis.org/forum/member.php?u=38135) پیشنهاد دادن، ایده درستیه که میتونه مشکلتون رو حل کنه ، ولیکن میتونید به جای اینکه فرم اولتون رو با استفاده از constructor به فرم دوم پاس بدین از مشخصه Owner فرم ها تون استفاده کنید به این شکل :

private void button1_Click(object sender, EventArgs e)
{
Form2 F = new Form2();
F.Owner = this;
F.Show();
}
و در فرم دوم برای پاک کردن لیست باکس مربوطه داریم .

private void button1_Click(object sender, EventArgs e)
{
((ListBox)this.Owner.Controls["ListBox1"]).Items.Clear();
}
یا علی


منم همین مشکل رو دارم
یه فرم دارم که فرزند یه فرم دیگس و یه فرمم دارم که فرزند هیچ کس نیست
حالا اون فرم فرزند باز هست ولی opacity فرم پدرش 0 شده و این فرزنده هم نشون داده نمیشه یعنی در اصل فرم فرزند و پدر بازه، بعد میخوام یه مقداری رو از اون فرم که فرزند هیچ کسی نیست پاس بدم به اون فرم فرزنده ، اولش میشد ولی الان نمیدونم هر کاری میکنم نشونش نمیده
در واقع یه label توی فرم فرزنده دارم که میخوام مقدار تکست این لیبل از یه فرم دیگه پر بشه ولی چون فرمم بازه همون مقدار اولیه لیبل رو میگیره:گریه:
از کدبالا هم استفاده کردم ولی این err رو بهم میده

Object reference not set to an instance of an object

اَرژنگ
چهارشنبه 04 شهریور 1388, 04:18 صبح
بارها در مورد استفاده نکردن از این چنین روشهایی در این انجمن بحث شده.
روش درست درخواست کردن از فرم برایه پاک کردن و یا تغییر دادن کنترلهایه خودش است.
دست انداختن همینطوری به کنترلهایه فرم دیگر روش درست نیست.

اگر یک پروژه کوچک که مشکلتان را نشان بده بفرستید درستش را میفرستم

elmira_63
چهارشنبه 04 شهریور 1388, 07:37 صبح
برنامم سنگینه نمیشه Upload اش کنم من میخوام با زدن یک کلید از یه فرمی اطلاعات مثلاً یه تکست باکس ریخته بشه تو یه تکست باکس دیگه از یه فرم دیگه که این فرم فرزند یه فرم دیگس در ضمن هر سه تافرمم باز هستند .
پارامتر رو میتونم پاس بدم ولی نمی دونم توی چه رویدادی از فرم دوم بنویسم که وقتی از فرم اول پاس داده شد توی این تکست باکس ریخته بشه
آخه من اومدم یه متغیر از نوع public تعریف کردم که با زدن یک کلید از فرم اول مقدار یه تکست باکس توی این متغییر ریخته می شه بعد بلافاصله Opacity فرم دومم که پدر فرم سومم بود برابر 1 میکردم تا فرم دوم و فرم سوم نشون داده بشه حالا توی کدوم رویداد از فرم سومم بنویسم که مقدار این پارامتر Public به یه تکست باکس از فرم سومم اختصاص داده بشه ؟؟؟؟؟؟؟؟؟؟؟؟

elmira_63
چهارشنبه 04 شهریور 1388, 13:11 عصر
کسی مشکل مارو نفهمید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟

اَرژنگ
چهارشنبه 04 شهریور 1388, 13:37 عصر
کسی مشکل مارو نفهمید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟
چیزی که تشریح کردید برایه درک من یکمی زیاد عجیب بود، اگر ممکن است یک پروژه کوچک بفرستید درستش کنیم.

در ضمن یک نگاهی هم به این توپیکها بندازید، از یک لحاض مشکلاتی که تشریح کردید ممکن است به یکی از این پستها ربط داشته باشد (بدانه دیدن کد و پروژه و اینکه هدفتان از شفاف کردن فرم و پس دادن متغییرها چی هست از این بیشتر از دستم برنمیاد)

http://barnamenevis.org/forum/showthread.php?t=125993
http://barnamenevis.org/forum/showthread.php?t=88552
http://barnamenevis.org/forum/showthread.php?t=175618

mahdi_7610
چهارشنبه 04 شهریور 1388, 18:14 عصر
برنامم سنگینه نمیشه Upload اش کنم من میخوام با زدن یک کلید از یه فرمی اطلاعات مثلاً یه تکست باکس ریخته بشه تو یه تکست باکس دیگه از یه فرم دیگه که این فرم فرزند یه فرم دیگس در ضمن هر سه تافرمم باز هستند .
پارامتر رو میتونم پاس بدم ولی نمی دونم توی چه رویدادی از فرم دوم بنویسم که وقتی از فرم اول پاس داده شد توی این تکست باکس ریخته بشه
آخه من اومدم یه متغیر از نوع public تعریف کردم که با زدن یک کلید از فرم اول مقدار یه تکست باکس توی این متغییر ریخته می شه بعد بلافاصله Opacity فرم دومم که پدر فرم سومم بود برابر 1 میکردم تا فرم دوم و فرم سوم نشون داده بشه حالا توی کدوم رویداد از فرم سومم بنویسم که مقدار این پارامتر Public به یه تکست باکس از فرم سومم اختصاص داده بشه ؟؟؟؟؟؟؟؟؟؟؟؟
سلام

راستش درک من از برنامه شما اینطوری بود .

شما یک فرم دارید به اسم parent و یک فرم به اسم chaild که این 2 تا به صورت MDi هستند .
حالا شما توی فرم chaild یک textbox و یک button دارید که با زدن دکمه button یک فرم دیگه به اسم Form1 باز میشه . و form1 شما هم دارای یک button و یک textbox هست .
و شما قصد دارید با زدن دکمه button مقدار موجود در texbox فرم 1 به textbox فرم chaild منتقل بشه .

کدهای فرم chaild


private void passData(object sender)
{
txtChaild.Text = ((TextBox)sender).Text;
}
private void button1_Click(object sender, EventArgs e)
{
Form1 frm = new Form1();
frm.pass = new PassControl(passData);
frm.Show();
}

کدهای Form1


public delegate void PassControl(object sender);
public PassControl pass;
private void button1_Click(object sender, EventArgs e)
{
if (pass != null)
{
pass(textBox1);
}
}

موفق باشی

linux
چهارشنبه 04 شهریور 1388, 20:04 عصر
این سوال به تعداد کاربران جدیدی که به انجمن اضافه شدند پاسخ داده شده است

shazlin
جمعه 20 آذر 1388, 15:38 عصر
salam
dar morede sakhtare tread ha tu c mikhastam bedunam.
mer30