PDA

View Full Version : سوال: مخفی سازی و unhide رویدادها و خصوصیات در یک UserControl



alireza_tavakol
چهارشنبه 14 مرداد 1388, 12:20 عصر
بعد از ساخت یک UserControl ، به غیر از خصوصیات و رویدادهایی که من واسه UserControl نوشتم خصوصیات و رویدادهای پیش فرضی به صورت اتوماتیک وجود دارد مثل رویداد های مربوط به mouse و یا خصوصیاتی مثل backcolor و...
* حالا چطوری میشه رویداد های بلا استفاده و یا خصوصیات کم کاربرد در یک UserControl رو مخفی کرد ؟ ( یعنی بعد از ساخت UserControl و استفاده اون در برنامه دیگر ، در حالت Design در پنجره properties این خصوصیات دیده نشه )

در ضمن من یک رویداد TextChanged واسه UserControl نوشتم که به درستی کار میکند ولی در هنگام استفاده از این UserControl ، این رویداد در پنچره properties در بخش رویداد ها به چشم دیده نمیشود ، چگونه این رویداد را در این پنچره نمایش دهم ؟

من از این دو نوع کد استفاده کردم ولی بازهم این رویداد از حالت مخفی خارج نشد!

new public event EventHandler TextChanged;

public event EventHandler TextChanged;

البته این مشکل فقط با لفظ TextChanged است یعنی اگر از کلمه دیگری استفاده نماییم ، رویداد مربوطه در پنجره properties نشان داده می شود

hozouri
چهارشنبه 14 مرداد 1388, 13:33 عصر
دوست عزیز این دستور رویداد پایه شیءرو نادیده گرفته و رویداد شما را در اولویت قرار می دهد . این دستور برای مخفی نمودن در پنجره خاصیت ها و رویداد ها نیست ...


new public event EventHandler TextChanged;

alireza_tavakol
چهارشنبه 14 مرداد 1388, 16:11 عصر
پس لطف کنید بفرمایید چگونه می توان رویداد ها و خصوصیات رو مخفی کرد یا از حالت مخفی خارج کرد ؟:متفکر:

Soroush.Sarabi
چهارشنبه 14 مرداد 1388, 17:43 عصر
دوست عزیز شما باید از BrowsableAttribute استفاده کنی جهت جلوگیری از نمایش Property ها و event ها.
ویرایش شده توسط مدیر بخش => مهدی کیانی
دلیل: حذف مطالبی که به موضوع تاپیک ارتباطی ندارند

alireza_tavakol
پنج شنبه 15 مرداد 1388, 10:29 صبح
با تشکر از دوستان

میشه لطف بفرمایید و یک کم بیشتر توضیح بدین که به چه شکلی باید از BrowsableAttribute استفاده کرد:متفکر:

علیرضا مداح
پنج شنبه 15 مرداد 1388, 13:52 عصر
سلام دوست عزیز،
توسط 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;

،/

alireza_tavakol
جمعه 16 مرداد 1388, 02:02 صبح
با سپاس فراوان

دقیقا من به دنبال همین فرِآیندی هستم که جناب آقای مداح فرمودند :

با 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 موجود در کلاس پدر رو به صورت یکجا مخفی کنم؟

Mahdi.Kiani
جمعه 16 مرداد 1388, 10:51 صبح
کاربر @Soroush.Sarabi (http://www.barnamenevis.org/forum/member.php?u=107516)
هیچ دلیلی وجود نداره که شما در پایان تمامی پست هایتان،مطالبی که درون امضایتان قراردارد را نیز قرار دهید.چون این مطالب هیج ارتباطی با موضوع تاپیک ندارند./
پست شما در این تاپیک توسط بنده ویرایش شد.
در صورت تکرار جریمه و درصورت ادامه از سایت اخراج خوهید شد./
این تذکربه این دلیل به صورت عمومی اعلام شد تا دیگر کاربران هم از این موضوع(قرار ندادن مطالبی در پست که بی ارتباط با موضوع تاپیک می باشد) اطلاع پیدا کنند./
موفق باشید./

alireza_tavakol
شنبه 17 مرداد 1388, 16:02 عصر
من هنوز جواب سوالم رو نگرفتم


چگونه میتوانم کلیه Property/Event موجود در کلاس پدر رو که کلاس فرزند به ارث برده را به صورت یکجا مخفی کنم؟

منظورم اینکه نخواهم برای هر کدوم از اعضای کلاس پدر [Browsable(false)] رو بنویسم

با تشکر از همه دوستان و اساتید :لبخندساده: