PDA

View Full Version : سوال: تغییر مقدار یک lable در تمام فرم های برنامه



hamedjonjon
دوشنبه 30 مرداد 1391, 22:52 عصر
باسلام
می خواستم مقدار یک lable رو که در فرم اصلی برنامه قرار داره از داخل یک فرم دیگه تغییر بدم(مثلا با وارد کردن مقدار یک textbox و زدن یک دکمه)
من خاصیت modifier مربوط به lable رو به public تغییر دادم ولی نشد
در ضمن هر دو فرم من در یک namespace قرار دارند
دوستان و اساتید گرامی لطفا راهنمایی بفرمایید
با تشکر

the king
دوشنبه 30 مرداد 1391, 23:12 عصر
باسلام
می خواستم مقدار یک lable رو که در فرم اصلی برنامه قرار داره از داخل یک فرم دیگه تغییر بدم(مثلا با وارد کردن مقدار یک textbox و زدن یک دکمه)
من خاصیت modifier مربوط به lable رو به public تغییر دادم ولی نشد
در ضمن هر دو فرم من در یک namespace قرار دارند
دوستان و اساتید گرامی لطفا راهنمایی بفرمایید
با تشکر

بجز اون Modifiers یک مشخصه دیگه هم هست به نام GenerateMember که اگه False باشه اسم Label در کلاس فرم نمیاد و دسترسی اش
در سایر فرم ها مشکل میشه. شما باید علاوه بر تغییر Modifiers اون GenerateMember رو هم True کنید.
در ضمن برای دسترسی به فرم مورد نظر باید به شیء ای که بازه دسترسی داشته باشید، نه خود کلاس فرضا Form1
به هر حال شما همیشه با همچین کدی به label1 دسترسی دارید، حتی اگه اون دو مشخصه Private و False باشند :

Application.OpenForms["Form1"].Controls.Find("label1", true)[0].Text = "sample";

hamedjonjon
چهارشنبه 01 شهریور 1391, 08:48 صبح
روش اول که گفتید به غیر از Modifiers باید GenerateMember رو هم true کرد، جواب نداد ( GenerateMember به طور پیشفرض true هست!)
روش دوم هم فقط برای کامپوننت های خود ویژال استودیو جواب میده و من که دارم با تلریک کار میکنم برای من جواب نداد

لطفا اگه راه دیگه ای وجود داره راهنمایی کنید

SokooteShab1
چهارشنبه 01 شهریور 1391, 09:37 صبح
مشکلش چیه مقدار دهی نمیشه یا ارور میده؟
اگر این جوری مقدار دهی کنید چی؟



Application.OpenForms["Form1"].Controls["label1"].Text = textBox1.Text;

hamedjonjon
جمعه 03 شهریور 1391, 16:35 عصر
دوستان کسی هست بگه چطور میشه به یک کنترلهای یک فرم از طریق فرم دیگه درسترسی داشت؟
با کدی که دوستان در بالا گفتند نمیشه به همه کامپوننت ها دسترسی داشت، چون اصلا اونها رو نمیشناسه که بشه از ویژگی های خاص کامپوننت استفاده کرد
من میخوام یک کامپوننت در تمام فرم ها م قابل دسترسی باشه، اما با public کردن مشخصه Modifier نتونستم این کار رو انجام بدم
لطفا یک نفر راهنمایی کنه

alexmcse
جمعه 03 شهریور 1391, 16:53 عصر
modifier رو برابر internal قرار بده
این کلمه کلیدی کنترلها را در هر جای از برنامه در دسترس قرار میدهد
internal label1
:تشویق::تشویق:

hamedjonjon
جمعه 03 شهریور 1391, 16:57 عصر
خوب Public که قوی تر از Internal عمل میکنه پسر خوب!
شما اول خودت یک امتحانی بکن بعد اگه جواب داد به هم ما بگو...

alexmcse
جمعه 03 شهریور 1391, 19:53 عصر
برای متدform2.show() عمل میکند .
Form2 f2 = new Form2();
f2.Show();
f2.label1.Text = "hello";
f2.label2.ForeColor = Color.Red;
f2.label2.Text = button1.Text + ":" + "is internal label1:";


:تشویق:
برای متد form2.ShowDialog() کد زیر

foreach (Form frm in Application.OpenForms)
{
if (frm is Form1)
{
Form1 f1 = (Form1)frm;
f1.label1.Text = "Change in to Form2.label";
}
}

:تشویق:

hamedjonjon
جمعه 03 شهریور 1391, 20:05 عصر
:متعجب:شما که داری یک فرم جدید میسازی!!!
در واقع این جواب هیچ ربطی به سوال من نداشت...

آقا اصلا خودم فهمیدم:چشمک:
برای این کار باید به Form1.Designer.cs رفت و اونجا کنترل مربوطه رو پیدا کرد و اون رو Public static کرد!
همین!

Mahmoud.Afrad
جمعه 03 شهریور 1391, 20:29 عصر
نیازی به static کردن نیست. شما کدتو بزار تا مشکلشو دوستان برطرف کنن.

hamedjonjon
جمعه 03 شهریور 1391, 21:02 عصر
مشکل ام بر طرف شد
ولی با static کردن هم جواب میداد،فقط عیب اش این بود که مدام خود ویژال استودیو به محض اینکه اگه جایی از this.label1 استفاده میکردم static رو برمیداشت!!!

آیا این کار راه حل دیگه ای داره؟؟؟
من که کلا روش کارم رو عوض کردم ولی کنجکاو شدم که بدونم!