PDA

View Full Version : سوال: چگونگی عدم نمایش یک پراپرتی در سی شارپ



yashar666
جمعه 27 بهمن 1391, 19:41 عصر
با سلام
دارم یه کنترل می نویسم یه کلاس دارم که از کلاس کنترل ارث میبره یه سری پراپرتی داره که برای عدم نمایش آنها در پنجره propertis یا نمایش آن از Attribute وکلاس Browsable استفاده میکنم


[Browsable(false)] or[Browsable(true)]

تقریبا مثل حرف کلیدی Shadow در vb

حالا می خوام یه پراپرتی که برای خود کلاس کنترل هست و در پنجره propertis نمایش داده شده رو محو کنم
باید چی کار کنم

the king
جمعه 27 بهمن 1391, 20:00 عصر
با سلام
دارم یه کنترل می نویسم یه کلاس دارم که از کلاس کنترل ارث میبره یه سری پراپرتی داره که برای عدم نمایش آنها در پنجره propertis یا نمایش آن از Attribute وکلاس Browsable استفاده میکنم


[Browsable(false)] or[Browsable(true)]

تقریبا مثل حرف کلیدی Shadow در vb

حالا می خوام یه پراپرتی که برای خود کلاس کنترل هست و در پنجره propertis نمایش داده شده رو محو کنم
باید چی کار کنم

داخل کلاس تون شبیه همون مشخصه رو همونطوری و public new تعریف کنید، new برای اینکه کامپایلر مطمئن بشه که
شما عمدا دارید اون نمونه اصلی رو مخفی می کنید. بعد همون صفت Browsable رو برای Property تون اضافه کنید.
خود کلاس های Net. همین کار رو انجام می دهند، فرضا TextBoxBase از Control ارث بری می کنه اما چون مشخصه Padding
در TextBoxBase مفهوم و کاربردی نداره، مخفی اش می کنه :

[DesignerSerializationVisibility(DesignerSerializat ionVisibility.Hidden)]
[Browsable(false)]
[EditorBrowsable(EditorBrowsableState.Never)]
public new Padding Padding { get; set; }

yashar666
جمعه 27 بهمن 1391, 20:53 عصر
ممنونم new رو می شناختم ولی نمیدونستم چه جوری اینجا استفاده کنم بار ممنون

yashar666
جمعه 27 بهمن 1391, 21:26 عصر
یه مشکل دیگه هم هست بعضی property ها کلاس نیستن(یعنی نیمیشه متقیری از اون کلاس ساخت که تو پراپرتی باشه ) !! منظورم مثلا در کلاس کنترل پراپرتی backcolor داره این چه جوری میشه ؟؟؟ ممنونم

yashar666
جمعه 27 بهمن 1391, 21:36 عصر
فهمیدم override میکنم :بامزه: چه سوتیی

the king
جمعه 27 بهمن 1391, 21:48 عصر
یه مشکل دیگه هم هست بعضی property ها کلاس نیستن(یعنی نیمیشه متقیری از اون کلاس ساخت که تو پراپرتی باشه ) !! منظورم مثلا در کلاس کنترل پراپرتی backcolor داره این چه جوری میشه ؟؟؟ ممنونم

اون ربطی به new نداره ها، کلمه کلیدی new کاربرد چندگانه داره، با اون new ای که برای شیء سازی از کلاس استفاده می کنید فرق داره.
لازم نیست که کلاس باشه، خیلی هاشون Struct یا نوع داده های Generic اند. بعضی از مشخصه ها virtual تعریف شدن اند، اونها رو با
override کردن مخفی می کنید (override رو که تایپ کنید، لیست مواردی که میشه override کرد رو خودش نشون میده) فرضا :

[Browsable(false)]
public override Color BackColor { get; set; }


اما بعضی هاشون virtual نیستند و شما مجاز به override کردن شون نیستید، اونها رو new می کنید :

[Browsable(false)]
public new bool UseWaitCursor { get; set; }

yashar666
جمعه 27 بهمن 1391, 22:21 عصر
بله بله دقیقا فهمیدم