با سلام و خسته نباشید خدمت اساتید
میخواستم بدونم چه جوری میشه خاصیت های یک کنترل مثلا label به وسیله یک کلاس تغییر داد (مثلا رنگش رو تغییر بدیم)
هر کاری کردم نتونستم بهش دسترسی پیدا کنم ممنون میشم کمکم کنید
Printable View
با سلام و خسته نباشید خدمت اساتید
میخواستم بدونم چه جوری میشه خاصیت های یک کنترل مثلا 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();
}
مطمئن شو که در فایل Form1.Design.cs کنترل مورد نظر به صورت Public تعریف شده باشه. اگه میخوای خواص کنترل رو از یک شیء دیگه تغییر بدی. و اگه نخ شئ دوم با نخ اصلی برنامه فرق میکنه (اگه به صورت چند نخی داری مینویسی) میتونی از تابع Label.BeginInvoke استفاده کنی.
و البته این که در تابعی که در شیء دیگری هست کنترل رو به صورت پارامتر ارسال کن.
موفق و سربلند باشيد.
M.M.D
ممنونعزیز
این کارا رو انجام دادم جواب نگرفتم
کار با
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)
دوست عزیز نشد
جواب نمیده
هرکاری میکنم وقتی فرم لود شد دیگه رنگ لبیل یا دکمه هایی که میخوام تغییر نمیکنه
این یک نمونه اجرا شده کامل
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 رو کپی کنین و اونجا استفاده کنین
مثلا یه دونه باتن بزارین و اون دو خط کد رو در رویداد کلیک باتن استفاده کنین