سلام
چگونه میشه به اجزای فرم دیگر تو پروژمون دسترسی داشته باشیم ؟
مثل متغیر یا لیبل .
یادم هست که تو ویبی به راهتی می شد .
ممنون میشم زود جواب بدین .
سلام
چگونه میشه به اجزای فرم دیگر تو پروژمون دسترسی داشته باشیم ؟
مثل متغیر یا لیبل .
یادم هست که تو ویبی به راهتی می شد .
ممنون میشم زود جواب بدین .
اگه یه سرچ ناقابلم میزدین بد نبود
form_shoma fsh=new form_shoma();
fsh.labele1.text.....
سلام
ولی این فقط برای خواندن هست ولی مثلا بخوای لیست رو Clear کنی نمیشه .
فقط در این حد می دونم که باید لیست رو publiic کنم .
ممنون .
خوب دوست من برای این کار همون طور که خودت گفتی باید اون کنترلی در فرم فعلی که می خوای از توی فرم دیگه بتونی پاکش کنی رو public تعریف کنی . و یک رفرنس از فرم فعلی رو به فرم دیگه وقتی که اون نمایش میدی پاس بدی ، بعد دیگه حله .توی برنامه ای که ضمیمه کردم همه چی مشخصه .
نه منظور من این بود که item های لیست رو پاک کنم .
هر کاری می کنم نمیشه .
ممنون میشم زود کمک کنید .
خوب دوست من فرقی نمی کنه . وقتی شما تو فرم دیگه به کنترلهای فرم اصلی دسترسی داشته باشی همه کار میتونی باهاشون انجام بدی . حالا مثلا برای پاک کردن محتویات یک لیست باکس که تو فرم اصلیت هست و مقدار داخلش داره کافیه تو همین برنامه ای که گذاشتم تو رویداد button1_Click فرم دوم این تکه کد رو هم اضافه کنی :
f.listBox1.Items.Clear();
خوب من هم همین کد رو نوشتم ولی پاک نمیشه .
ممنون .
دوست عزیز من فقط دو تا نکته می گم
- این که خاصیت modifire شی شما باید public باشه و دوم این که
f.listBox1.Items.Clear();
باید قبل از
f.show()
باشه
دوست عزیز من فرم اولم باز هست و بعد دومی رو باز می کنم و بعد می خواهم از دومی لیست فرم اول رو پاک کنم .
ممنون میشم اگه قبل از کد گذاشتن یه تست بزنی .
دوست عزیز ابتدا کامل توضیح دهید تا به جواب سریع برسید
برای این کار مثلا در قسمت public فرم کد زیر را درج کنید
static public ListBox l1;
خوب حالا در لود فرم ایجاد و به فرم اضافه کنید
l1 = new ListBox();
this.Controls.Add(l1);
l1.Items.Add("asd");
و در اخر از فرم دوم ان را خالی کنید
Form1.l1.Items.Clear();
دلیل این کار اینه که متغیر نوع استاتیک را تا زمان اجرای برنامه زنده هست و مشه بهش دسترسی داشت
سلام دوست من
ایده ای که دوستمون corona پیشنهاد دادن، ایده درستیه که میتونه مشکلتون رو حل کنه ، ولیکن میتونید به جای اینکه فرم اولتون رو با استفاده از 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();
}
یا علی
آقا جواب داد. میشه در مورد کد یه توضیح کوچیک بدید...من در مورد owner چیزی نمیدونم...
قبلا برای اینکه ما به فرم اولی در فرم دومی دسترسی داشته باشیم و یا به اصطلاح ریسمان زمان اجرای اون رو داشته باشیم باید هندل فرم رو به فرم دومی پاس می دادیم و اونجا ازش استفاده می کردیم ولی باowner دیگه نیازی به این کار نیست چون خودش این کار رو برات انجام میده . البته در حالتی که برنامه رو با چند ریسمان می نویسید و صفحات در ریسمان های مختلف اجرا میشن شکل دسترسیتون باید با delegate بشه که شما با این مساله برخورد نمی کنید .
البته می دونی مشکل این حالت چیه ؟ TypeChecking نداره . و خطاهای زمان اجراش زیاده .
شما برای اینکه به عنصر موجود در صفحه اول دسترسی داشته باشی باید اسم اون کنترل رو به صورت رشته بنویسی که در زمان اجرای برنامه بررسی میشه . و اینکه برای تبدیل نوعها هم در زمان اجرا می فهمه که قابل تبدیل نیست . بهتره کد رو به این صورت بنویسی :
فرم اولت رو به همون صورت بالا انجام بده و در فرم دوم برای پاک کردن :
{
Form1 frm = new Form1();
frm = (Form1)this.Owner;
frm.ListBox1.Items.Clear();
}
البته باید کنترلت رو به صورت public تعریف کنی .
منم همین مشکل رو دارم
یه فرم دارم که فرزند یه فرم دیگس و یه فرمم دارم که فرزند هیچ کس نیست
حالا اون فرم فرزند باز هست ولی opacity فرم پدرش 0 شده و این فرزنده هم نشون داده نمیشه یعنی در اصل فرم فرزند و پدر بازه، بعد میخوام یه مقداری رو از اون فرم که فرزند هیچ کسی نیست پاس بدم به اون فرم فرزنده ، اولش میشد ولی الان نمیدونم هر کاری میکنم نشونش نمیده
در واقع یه label توی فرم فرزنده دارم که میخوام مقدار تکست این لیبل از یه فرم دیگه پر بشه ولی چون فرمم بازه همون مقدار اولیه لیبل رو میگیره
از کدبالا هم استفاده کردم ولی این err رو بهم میده
Object reference not set to an instance of an object
بارها در مورد استفاده نکردن از این چنین روشهایی در این انجمن بحث شده.
روش درست درخواست کردن از فرم برایه پاک کردن و یا تغییر دادن کنترلهایه خودش است.
دست انداختن همینطوری به کنترلهایه فرم دیگر روش درست نیست.
اگر یک پروژه کوچک که مشکلتان را نشان بده بفرستید درستش را میفرستم
برنامم سنگینه نمیشه Upload اش کنم من میخوام با زدن یک کلید از یه فرمی اطلاعات مثلاً یه تکست باکس ریخته بشه تو یه تکست باکس دیگه از یه فرم دیگه که این فرم فرزند یه فرم دیگس در ضمن هر سه تافرمم باز هستند .
پارامتر رو میتونم پاس بدم ولی نمی دونم توی چه رویدادی از فرم دوم بنویسم که وقتی از فرم اول پاس داده شد توی این تکست باکس ریخته بشه
آخه من اومدم یه متغیر از نوع public تعریف کردم که با زدن یک کلید از فرم اول مقدار یه تکست باکس توی این متغییر ریخته می شه بعد بلافاصله Opacity فرم دومم که پدر فرم سومم بود برابر 1 میکردم تا فرم دوم و فرم سوم نشون داده بشه حالا توی کدوم رویداد از فرم سومم بنویسم که مقدار این پارامتر Public به یه تکست باکس از فرم سومم اختصاص داده بشه ؟؟؟؟؟؟؟؟؟؟؟؟
کسی مشکل مارو نفهمید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟؟؟؟؟؟؟؟؟
چیزی که تشریح کردید برایه درک من یکمی زیاد عجیب بود، اگر ممکن است یک پروژه کوچک بفرستید درستش کنیم.
در ضمن یک نگاهی هم به این توپیکها بندازید، از یک لحاض مشکلاتی که تشریح کردید ممکن است به یکی از این پستها ربط داشته باشد (بدانه دیدن کد و پروژه و اینکه هدفتان از شفاف کردن فرم و پس دادن متغییرها چی هست از این بیشتر از دستم برنمیاد)
https://barnamenevis.org/showthread.php?t=125993
https://barnamenevis.org/showthread.php?t=88552
https://barnamenevis.org/showthread.php?t=175618
سلام
راستش درک من از برنامه شما اینطوری بود .
شما یک فرم دارید به اسم 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);
}
}
موفق باشی
این سوال به تعداد کاربران جدیدی که به انجمن اضافه شدند پاسخ داده شده است
salam
dar morede sakhtare tread ha tu c mikhastam bedunam.
mer30