PDA

View Full Version : تغییر property های یک یوزر کنترل در زمان اجرا



ras1364
شنبه 11 خرداد 1392, 09:40 صبح
با سلام

دوستان من یک یوزر کنترل درست کردم که یک پیکچر باکس داره ، برای رنگ پیکچر باکس یک پراپرتی گذاشتم که برنامه نویس بتونه رنگ اونو عوض کنه

private Color _BackgColor ;
public Color BackgColor {
set{ _BackgColor = value;this.PBox.invalidate();}
get {return _BackgColor;}
}

این کد در حالت دیزاین درست کار می کنه وقتی رنگ رو از تو قسمت پراپرتی تغییر می دم تغییر می کنه اشکال کار من اینجاست که وقتی این یوزر کنترل رو روی یک فرم اد می کنم بااینکه از قسمت پراپرتی ها رنگ بک گراند رو عوض می کنم ولی وقتی پروژه رو اجرا می کنم دوباره رنگش به حالت اول بر می گرده . یعنی در زمان ران تایم هیچ تغییری توی رنگ اون ایجاد نمی شه

یکی از اساتید راهنماییم کنه لطفا
با تشکر

saied_hacker
شنبه 11 خرداد 1392, 11:10 صبح
تا اونجا که من میدونم تابع invalidate() باعث میشه که فرم/پیکچرباکس پاک بشه و شما دستوری برای رسم مجدد توی set ننوشتید. ؟!
شما باید بعدش دوباره چیزی که قبلا بوده رو رسم کنید(که اینجا رنگ پس زمینه هست)
یوزر کنترل رو بزار اینجا اگه میتنوی

ویرایش:
شما باید بعد از invalidate() از تابع update() استفاده کنید.
Control.Update Method (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.update.aspx)

ras1364
یک شنبه 12 خرداد 1392, 22:44 عصر
اشتباه من در این بود که مقداردهی اولیه BackgColor رو توی فرم لود انجام می دادم ، موقعی که یوزرکنترل رو توی یک پروژه اد می کردم و اونو روی فرم می ذاشتم می رفتم از قسمت پراپرتی رنگ BackgColor رو عوض می کردم روی فرم رنگش عوض می شد ولی به محض اینکه پروژه رو ران می کردم تابع form_Load اجرا می شد و رنگ به حالت اول بر می گشت

حالا این طوری کدمو عوض کردم

private Color _BackgColor =Color.Cyan;
public Color BackgColor {
set{ _BackgColor = value;this.PBox.invalidate();}
get {return _BackgColor;}
}