PDA

View Full Version : طراحي UserControl كه فقط داراي دو خاصيت textوfont‌ باشه



mah.yar
یک شنبه 12 آبان 1387, 22:06 عصر
همطونطور كه ميدونيد ميتونيم با استفاده از كد:


Public string myText
{
get {return this.myText;}
set {myText=value;}
}

يه خاصيت جديد به خاصيت هاي user Control اضافه كنيم.
اما من ميخوام user Control اي طراحي كنم كه فقط شامل خواصي باشه كه من تعريف كردم. يا به عبارتي مثلا يه textbox طراحي كنيم كه فقط شامل دو خاصيت text,font‌باشه.

SMRAH1
دوشنبه 13 آبان 1387, 07:39 صبح
سلام

ابتدا یک کنترل از TextBox مشتق کنی و بعد تمام Property ها Textbox را در این کنترل جدید رونویسی کنی که البته باید Attribute اونها را Browseable = Flase کنی.

موفق باشی

mah.yar
دوشنبه 13 آبان 1387, 09:34 صبح
همونطور كه گفتيد از
[Browsable(false)]
public override Cursor Cursor
{
get
{
return base.Cursor;
}
set
{
base.Cursor = value;
}
} براي حذف خاصيت Cursor استفاده كردم و درست جواب داد.
براي event هم راه حلي هست؟

SMRAH1
دوشنبه 13 آبان 1387, 11:08 صبح
سلام

1) پست قبلی رو ویرایش کردم.
2) Event ها اگر virtual باشند بله، مثل خصوصیات رفتار کنید است ولی اگر نباشند نه نمی توان حذفشان کرد!

private void FireEvent()
{
MyEvent1(this, null);
}

[Browsable(false)]
public event EventHandler MyEvent1;
3) هدف تان از این نکته چیست؟ همیشه راه های بهتری هم هست!

موفق باشید

mehdi.mousavi
دوشنبه 13 آبان 1387, 11:42 صبح
من ميخوام user Control اي طراحي كنم كه فقط شامل خواصي باشه كه من تعريف کردم.

سلام.
جای اینکه کلاستون رو از کلاس UserControl درایو کنید، اونو از کلاس Control درایو کنید. این کلاس، بر خلاف کلاس UserControl یه Container Control نیست و فقط حاوی حداقل امکاناتی هستش که هر پنجره ای در Windows باید داشته باشه.

اما اگر هدفتون Subclass کردن TextBox هست، نمیتونید چنین کاری باهاش کنید و بسته به نیاز، Property و Event های مورد نظرتون رو حذف کنید. روشی که ذکر شد شاید در مرحله اول عملی بنظر برسه (استفاده از Browsable) اما در واقعیت، هم از نظر نظری این کار صحیح نیست و هم از نظر عملی مشکلات عمده دیگه ای پیش میاره.

بعنوان مثال، برای مخفی کردن Property مورد نظر از دید IntelliSense باید از EditorBrowable استفاده کنید، چون IntelliSense به BrowsableAttribute نگاه نمیکنه!

پاورقی: همیشه سعی کنید شهروند خوبی برای محیط .NET باشید، و از قوانین اون محیط تبعیت کنید.

mah.yar
دوشنبه 13 آبان 1387, 19:42 عصر
واقعيتش من بايد يه موضوع پروژه كلاسي انتخاب كنم و اين ايده به ذهنم رسيد كه موضوع پروژه ام ساخت يه كامپوننت(كنترل) براي socket باشه مثل همون چيزي كه تو VB6 هست.
يعني كامپوننتي براي socket بسازم كه كاربر فارغ از جزييات بتونه تحت شبكه برنامه نويسي كنه.
مسلما اين كامپوننت بايد داراي خواصي مثل IP , Port,... و رويدادهايي مثل Dara_arrived , Connection_Closedو ... باشه.
با اين تفاسير براي كامپوننت socket خواصي مثل Font,Size,... بي معني وبي كاربرد هست(همچنين رويدادهايي مثل Key_Pressو...).
به همين خاطر ميخوام يه كنترلي بسازم كه خواص و رويدادش مرتبط با موضوع socket باشه.
آيا اصلا همچين چيزي شدني هست؟

SMRAH1
دوشنبه 13 آبان 1387, 20:39 عصر
بهتره مستقیما از System.ComponentModel.Component مشتق کنی.برای یک نمونه هم اینجا (http://www.google.com/codesearch?hl=en&q=%22System.ComponentModel.Component%22+lang:c%23+ show:eGTJ0yrxS84:SsnnzkAst84:eGTJ0yrxS84&sa=N&cd=1&ct=rc&cs_p=http://kparser.googlecode.com/svn&cs_f=trunk/ParserCore/KPDatabaseReadOnly.Designer.cs)رو ببین.

mehdi.mousavi
سه شنبه 14 آبان 1387, 14:14 عصر
واقعيتش من بايد يه موضوع پروژه كلاسي انتخاب كنم و اين ايده به ذهنم رسيد كه موضوع پروژه ام ساخت يه كامپوننت(كنترل) براي socket باشه مثل همون چيزي كه تو VB6 هست. يعني كامپوننتي براي socket بسازم كه كاربر فارغ از جزييات بتونه تحت شبكه برنامه نويسي كنه. مسلما اين كامپوننت بايد داراي خواصي مثل IP , Port,... و رويدادهايي مثل Dara_arrived , Connection_Closedو ... باشه. با اين تفاسير براي كامپوننت socket خواصي مثل Font,Size,... بي معني وبي كاربرد هست(همچنين رويدادهايي مثل Key_Pressو...).
به همين خاطر ميخوام يه كنترلي بسازم كه خواص و رويدادش مرتبط با موضوع socket باشه.
آيا اصلا همچين چيزي شدني هست؟

سلام.
روش همونی هستش که SMRAH1 گفتن، اما بنظر من این ایده، ایده جالبی نیست. وقتی شما کلاس System.Net.Sockets.Socket رو در .NET Framework دارید که کلیه این مسائل رو پشتیبانی میکنه، نوشتن یه Wrapper ساده (در قالب یک Component) که اساسا چیز جدیدی به کلاس مزبور اضافه نمیکنه، کار صحیحی بنظر نمیرسه.

mah.yar
سه شنبه 14 آبان 1387, 17:21 عصر
حرف شما(mehdi6755 (http://barnamenevis.org/forum/member.php?u=41233)) درست ولي من ميخوام تو اين كامپوننت كاربر وارد جزييات نشه.
مثلا كاربر فقط با نوشتن
winsock1.connect(ip,port) به سرور وصل بشه و همچنين براي ارسال اطلاعات و دريافت اطلاعات نيازي به تبديل از string‌ به بايت و... نداشته باشه.
و مهمتر اينكه براي ارسال فايل بتون براحتي با دستور مثلا:
winsock1.sendfile(filepath) فايل رو ارسال كنه و همچنين اعمال thread و...
ممنون از راهنمايي هاي همه دوستان