PDA

View Full Version : حرفه ای: نحوه تغییر در پروپرتیس یک کنترل



group45
پنج شنبه 14 دی 1391, 21:47 عصر
با سلام
میخوام یه کنترل جدید بسازم که مثلا خاصیت تکست باکس رو داشته باشه ولی مثلا سایز یا تب ایندکس مداشته باشه. و حتی چیزهای جدیدی بش اضافه کرد
باید چکار کرد؟

samadblaj
پنج شنبه 14 دی 1391, 22:16 عصر
آره منم دوست دارم همیچین چیزی رو یاد بگیرم البته اگه به صورت ساده باشه قبلا یه آموزش بود که خسته کننده و پیچیده بود...
مثلا : یه تکست رو سفارش کنیم که فقط اعداد بپذیره....

the king
پنج شنبه 14 دی 1391, 23:06 عصر
با سلام
میخوام یه کنترل جدید بسازم که مثلا خاصیت تکست باکس رو داشته باشه ولی مثلا سایز یا تب ایندکس مداشته باشه. و حتی چیزهای جدیدی بش اضافه کرد
باید چکار کرد؟

موقع طراحی کردن فرم استاندارد، شیء ای روی اون قرار می گیره که از کلاس Control ارث بری کنه، و چون Control مشخصه Size داره و هر شیء ای هم
که قابل انتخاب کردن باشه (Selectable یا Focusable) مشخصه TabIndex داره، نمیشه کلاسی بسازید که هم Control باشه و هم بعضی از مشخصه های Control
رو نداشته باشه. اما راه حل دیگری هست، یک کلاس می تونه یکسری از مشخصه هاش رو از دید ظاهری مخفی کنه، هست، کار هم می کنه، اما دیده نمیشه.

فرضا این کلاس MyTextBox وارث TextBox ئه، اما مشخصه Size اش رو در پنجره Properties و اگه تبدیل به DLL بشه در هنگام کد نویسی مخفی کرده :


class MyTextBox : System.Windows.Forms.TextBox
{
[System.ComponentModel.EditorBrowsable(System.Compo nentModel.EditorBrowsableState.Never)]
[System.ComponentModel.Browsable(false)]
public new System.Drawing.Size Size { get; set; }
}

group45
پنج شنبه 14 دی 1391, 23:41 عصر
با سلام
تشکر از شما
یه سوال دیگه داشتم
این کروشه ای که توش کد رو نوشتید چیه و چرا؟ خلاصه یه توضیخ کامل بدید.ممنون [System.ComponentModel.Browsable(false)]

the king
جمعه 15 دی 1391, 22:45 عصر
با سلام
تشکر از شما
یه سوال دیگه داشتم
این کروشه ای که توش کد رو نوشتید چیه و چرا؟ خلاصه یه توضیخ کامل بدید.ممنون [System.ComponentModel.Browsable(false)]
یک کلاس خاص داریم به نام System.Attribute که عملکرد اش با بقیه کلاس ها فرق داره و جایی که ازش استفاده می کنند از [ ] استفاده میشه.
کلاس های متعددی هستند که از کلاس System.Attribute ارث بری می کنند، ویرایشگر Visual Studio برای اینجور کلاس ها یکسری قابلیت ویژه در نظر گرفته
و عملا رفتار ویژوال استدیو با این کلاس ها خاص ئه. فرضا اسم کلاس BrowsableAttribute است اما می توانید موقع استفاده ازش فقط Browsable رو بنویسید.
یا فرضا همانطور که خودتان اشاره کردید نسبت دادن صفت رو داخل [ ] قرار می دهند.

توسط این کلاس ها شما می توانید صفاتی رو به سایر کد هایی که می نویسید نسبت بدید. بعضی از این صفت ها رو خود ویژوال استدیو بکار می بره
و وجودشون روی نحوه عملکرد اش تاثیر داره. تعداد این کلاس ها زیاده و هر کدوم یک صفت خاص رو در نظر می گیرند، حتی خودتان هم می توانید یک
صفت جدید بسازید. یکی از این صفت های مرسوم که در خود ویژوال استدیو بکار میره Browsable ئه، اگر Browsable یک مشخصه رو False کنید دیگه
اون مشخصه در پنجره Properties ویژوال استدیو نشون داده نمیشه، چون ویژوال استدیو برای کلاس BrowsableAttribute چنین قابلیتی در نظر گرفته.