با سلام و خسته نباشید خدمت اساتید
میخواستم بدونم چه جوری میشه خاصیت های یک کنترل مثلا label به وسیله یک کلاس تغییر داد (مثلا رنگش رو تغییر بدیم)
هر کاری کردم نتونستم بهش دسترسی پیدا کنم ممنون میشم کمکم کنید
با سلام و خسته نباشید خدمت اساتید
میخواستم بدونم چه جوری میشه خاصیت های یک کنترل مثلا label به وسیله یک کلاس تغییر داد (مثلا رنگش رو تغییر بدیم)
هر کاری کردم نتونستم بهش دسترسی پیدا کنم ممنون میشم کمکم کنید
public class cl1
{
pulic void changecolor(lable l){
l.backcolor = color.red;
{
{
بعد این تابع رو صدا میزنی و لیبل رو براش میفرستی بعد رنگ پس زمینه میشه قرمز
دوست عزیز این کارو کردم اما نشد
ببین من یک فرم دارم یک قسمتش مثل چراغ راهنما کار میکنه، 5 تا کلاس هم دارم که هر کدومش یه فایل جدا داره
حالا من میخوام تو یکی از این کلاسا اگه کاری که میخوام انجام بدم انجام بشه بتونم به label مورد نظر دسترسی پیدا کنم و رنگش رو عوض کنم
مشکلم اینه که نمی تونم به label دسترسی داشته بام
دوستان کسی نبود کمک کنه!!!
من متدی که تو کلاس فرمم نوشتم رو تو یک کلاس دیگه فراخوانی میکنم اما تغیراتی که میخوام رو انجام نمیده( رنگ label رو برام عوض نمیکنه) دلیلش چیه، اگه کسی میتونه لطفا راهنمایی کنید
کد کلاس فرم:
public void Changer()
{
if (lbl1.BackColor != Color.Red &&2.BackColor != Color.Green)
{
lbl1.BackColor = Color.Red;
lbl2.BackColor = Color.Green;
}
else
{
lbl1.BackColor = Color.Green;
lbl2.BackColor = Color.Red;
}
}
کد کلاس دوم برای اجرای متد Changer
public void Move()
{
Form1.Changer();
}
آخرین ویرایش به وسیله Mahmoud.Afrad : جمعه 26 آذر 1395 در 22:14 عصر
مطمئن شو که در فایل Form1.Design.cs کنترل مورد نظر به صورت Public تعریف شده باشه. اگه میخوای خواص کنترل رو از یک شیء دیگه تغییر بدی. و اگه نخ شئ دوم با نخ اصلی برنامه فرق میکنه (اگه به صورت چند نخی داری مینویسی) میتونی از تابع Label.BeginInvoke استفاده کنی.
و البته این که در تابعی که در شیء دیگری هست کنترل رو به صورت پارامتر ارسال کن.
موفق و سربلند باشيد.
M.M.D
آخرین ویرایش به وسیله m2011kh : جمعه 26 آذر 1395 در 21:13 عصر
ممنونعزیز
این کارا رو انجام دادم جواب نگرفتم
کار با
BeginInvoke رو بلد نیستم ، اگه لطف کنی بگی چطور کار میکنه ممنون میشم( به صورت چند نخی ننوشتم)
بهتره که از تابع BeginInvoke استفاده نکنی اگه به صورت چند نخی نمینویسی. اصلا کار درستی نیست. سورس پروژه ات رو بزار اون قسمتی که مشکل داره رو برات اصلاح میکنم، بعدا خودت ببین چطوری شده.
سورست رو ضمیمه کن.
موفق و سربلند باشید.
M.M.D
public class cl1
{
pulic void changecolor(ByRef lable l){
l.backcolor = color.red;
{
{
این کد رو استفاده کن...
دوستان ممنون ار راهنمایتون
اما من هر کاری کردم نشد.
اگه زحمتی نیست یه مثال ساده بنویسید بزارید
شاید من هنگ کردم نمیتونم ج بگیرم
این نمونه
بیا این کلاس رو یه جا تو برنامه بزار
class Class1
{
public void ChangeBackColor(System.Windows.Forms.Label lb)
{
lb.BackColor = System.Drawing.Color.Red;
}
}
بعد تو برنامه اینطوری ازش استفاده کن
Class1 cl1 = new Class1();
cl1.ChangeBackColor(ref lable1)
دوست عزیز نشد
جواب نمیده
هرکاری میکنم وقتی فرم لود شد دیگه رنگ لبیل یا دکمه هایی که میخوام تغییر نمیکنه
آخرین ویرایش به وسیله 30yamand : دوشنبه 06 دی 1395 در 13:38 عصر
این یک نمونه اجرا شده کامل
WindowsFormsApplication1.zip
hamid_hr جان
دوست عزیز کدی که شما زحمتش رو کشیدید، فقط یک بار اونم زمانی که فرم لود میشه اجرا میشه( عمل میکنه) ، من چیزی که میخوام برنامه به صورت مکرر تحت شرطی که تو کلاس دوم میزارم در زمان که فرم اجرا شده اجرا بشه
class Class1
{
Form1 frm= new Form1();
public void ChangeBackColor(ref Label lb)
{
if (shartEjra())
{
lb.BackColor = Color.Red;
}
else
{
lb.BackColor = Color.Green;
}
}
public bool shartEjra()
{
if (frm.label1.BackColor== Color.Transparent)
{
return true;
}
else
{
return false;
}
}
}
کدی که نوشتم هم ج نمیده
اینو چرا داخل کلاس تعریف کردین؟
Form1 frm= new Form1();
شما ابتدا یکم در مورد کلاس و مباحث اولیه مربوط به oop مطالعه بفرمایید بعد خودتون متوجه میشین چطور انجامش بدین
اون که من نوشتم فقط یک نمونه بود که طریق کار رو متوجه بشین
برا اینکه بتونین هر جایی ازش استفاده کنین باید دو خط کد موجود در form_load رو کپی کنین و اونجا استفاده کنین
مثلا یه دونه باتن بزارین و اون دو خط کد رو در رویداد کلیک باتن استفاده کنین