مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
بعد از ساخت یک UserControl ، به غیر از خصوصیات و رویدادهایی که من واسه UserControl نوشتم خصوصیات و رویدادهای پیش فرضی به صورت اتوماتیک وجود دارد مثل رویداد های مربوط به mouse و یا خصوصیاتی مثل backcolor و...
* حالا چطوری میشه رویداد های بلا استفاده و یا خصوصیات کم کاربرد در یک UserControl رو مخفی کرد ؟ ( یعنی بعد از ساخت UserControl و استفاده اون در برنامه دیگر ، در حالت Design در پنجره properties این خصوصیات دیده نشه )
در ضمن من یک رویداد TextChanged واسه UserControl نوشتم که به درستی کار میکند ولی در هنگام استفاده از این UserControl ، این رویداد در پنچره properties در بخش رویداد ها به چشم دیده نمیشود ، چگونه این رویداد را در این پنچره نمایش دهم ؟
من از این دو نوع کد استفاده کردم ولی بازهم این رویداد از حالت مخفی خارج نشد!
new public event EventHandler TextChanged;
public event EventHandler TextChanged;
البته این مشکل فقط با لفظ TextChanged است یعنی اگر از کلمه دیگری استفاده نماییم ، رویداد مربوطه در پنجره properties نشان داده می شود
نقل قول: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
دوست عزیز این دستور رویداد پایه شیءرو نادیده گرفته و رویداد شما را در اولویت قرار می دهد . این دستور برای مخفی نمودن در پنجره خاصیت ها و رویداد ها نیست ...
new public event EventHandler TextChanged;
نقل قول: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
پس لطف کنید بفرمایید چگونه می توان رویداد ها و خصوصیات رو مخفی کرد یا از حالت مخفی خارج کرد ؟:متفکر:
نقل قول: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
دوست عزیز شما باید از BrowsableAttribute استفاده کنی جهت جلوگیری از نمایش Property ها و event ها.
ویرایش شده توسط مدیر بخش => مهدی کیانی
دلیل: حذف مطالبی که به موضوع تاپیک ارتباطی ندارند
نقل قول: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
با تشکر از دوستان
میشه لطف بفرمایید و یک کم بیشتر توضیح بدین که به چه شکلی باید از BrowsableAttribute استفاده کرد:متفکر:
نقل قول: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
سلام دوست عزیز،
توسط BrowsableAttribute تنها می توانید Property/Event مورد نظر را در پنجره ی Properties Window مخفی نمایید و برنامه نویس هنوز می تواند در Code Editor به آن دسترسی داشته باشد(توجه داشته باشید که در مورد برخی اعضای پیاده سازی شده در چارچوب کاری دات نت، Intellisense آن را نمایش نمی دهد و همچنان در صورت دسترسی به آن با خطا مواجه نخواهید شد، این گونه اعضا دز MSDN بدین گونه شرح داده میشوند:
This API supports the .NET Framework infrastructure and is not intended to be used directly from your code.
،
دات نت فریم ورک جهت انجام اینکار(مخفی کردن اعضاء در Intellisense) از EditorBrowsableAttribute استفاده می کند، به طور مثال، کلاس PrintPreviewDialog از کلاس Form به ارث گرفته می شود، اما پروپرتی Text مربوط به آن توسط Intellisense نمایش داده نمی شود چون در کلاس Derived به صورت زیر اعلان شده است:
[Browsable(false)] //[Hiding In Properties Window]
[EditorBrowsable(EditorBrowsableState.Never)] //[Hiding By Intellisense]
public override string Text { get; set; }
شما نمی توانید هنگام ارث بری از کلاس Base، یکی از Public Member های آن را در کلاس Derived مخفی نمایید،(طبق نکات فوق تنها میتوانید آن را در Properties Window و Intellisense مخفی نمایید و همچنان امکان دسترسی به آن وجود دارد) بلکه می توانید پیاده سازی آن را در صورت امکان و آن هم فقط در سطح کلاس Derived تغییر دهید،
برنامه نوس به هر حال می تواند به اعضای Public کلاس Base دسترسی پیدا کند:
//--pseudo code--
//Dervied class is inherited from Base class
Derived child = new Derived();
Base parent = (Base)child;
//Accessing Public Member
parent.PublicProperty;
،/
نقل قول: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
با سپاس فراوان
دقیقا من به دنبال همین فرِآیندی هستم که جناب آقای مداح فرمودند :
نقل قول:
با BrowsableAttribute می توانید Property/Event مورد نظر را در پنجره ی Properties Window مخفی نمایید
کلاس که من نوشتم از کلاس UserControl مشتق شده است و من می خواهم بعد از اتمام پروژه ام که خروجی به عنوان یک DLL در برنامه های دیگر مورد استفاده واقع می شود کلیه Property/Event که در کلاس UserControl وجود دارد در پنجره Properties Window نشان داده نشود و فقط Property/Event هایی که من در کلاسم نوشتم در پنجره Properties Window نشان داده شود.
البته دوستان توجه داشته باشند که من از کد زیر مثلا" برای مخفی کردن ( متد Enter که به صورت پیش فرض در کلاس UserControl وجود دارد ) استفاده کردم
[Browsable(true)]
new public event EventHandler Enter;
ولی این کد دوتا عیب دارد
1- باید برای تک تک Event ها یا Property ها کلاس UserControl نوشته شود
2- این کد Warning می دهد چون من در هیچ کجای کلاسم از این متد استفاده نکرده ام
* حالا من سوالم اینکه چگونه باید کلیه Property/Event موجود در کلاس پدر رو به صورت یکجا مخفی کنم؟
نقل قول: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
کاربر @Soroush.Sarabi
هیچ دلیلی وجود نداره که شما در پایان تمامی پست هایتان،مطالبی که درون امضایتان قراردارد را نیز قرار دهید.چون این مطالب هیج ارتباطی با موضوع تاپیک ندارند./
پست شما در این تاپیک توسط بنده ویرایش شد.
در صورت تکرار جریمه و درصورت ادامه از سایت اخراج خوهید شد./
این تذکربه این دلیل به صورت عمومی اعلام شد تا دیگر کاربران هم از این موضوع(قرار ندادن مطالبی در پست که بی ارتباط با موضوع تاپیک می باشد) اطلاع پیدا کنند./
موفق باشید./
نقل قول: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl
من هنوز جواب سوالم رو نگرفتم
نقل قول:
چگونه میتوانم کلیه Property/Event موجود در کلاس پدر رو که کلاس فرزند به ارث برده را به صورت یکجا مخفی کنم؟
منظورم اینکه نخواهم برای هر کدوم از اعضای کلاس پدر [Browsable(false)] رو بنویسم
با تشکر از همه دوستان و اساتید :لبخندساده: