PDA

View Full Version : ساخت کامپوننت



regbyte
چهارشنبه 19 دی 1386, 16:59 عصر
سلام

من می خوام ظاهر یک Button رو تغییر بدم، مثلا از دو رنگ برای آن استفاده کنم و ...
و سپس آنرا بصورت یک کامپوننت در آورم.

لطفا راهنمایی کنید.

Mahdi.Kiani
چهارشنبه 19 دی 1386, 18:17 عصر
سلام

من می خوام ظاهر یک Button رو تغییر بدم، مثلا از دو رنگ برای آن استفاده کنم و ...
و سپس آنرا بصورت یک کامپوننت در آورم.

لطفا راهنمایی کنید.

سلام
راه خیلی سادش و البته پیش پا افتاده و مسخرش اینه که یک پروژه از جنس Class library ایجاد کنی و از Button ارث بری کنی و رویداد paint آن را Override کنی
یه چیزی مثل کد زیر


protected override void OnPaint(PaintEventArgs pevent)
{
System.Drawing.Drawing2D.LinearGradientBrush gBrush = new System.Drawing.Drawing2D.LinearGradientBrush(this. ClientRectangle, Color.Red, Color.Blue, System.Drawing.Drawing2D.LinearGradientMode.Horizo ntal);
pevent.Graphics.FillRectangle(gBrush, this.ClientRectangle);


}




البته باید برای خاصیت Text هم کد مربوطه را بنویسی(توسط متد DrawString)

البته من به هیچ عنوان استفاده از روش فوق را پیشنهاد نمی کنم
روش بهتر اینه که یک کلاس ایجاد کنی که از کلاس Control ارث بری کنه
بعد خوت بیای رویداد Paint اونو هرجور که می خوای باهاش حال کنی تغییر بدی
بعدش رویداد های مربوط به Click و .... را بر حسب نیاز Override کنی
نمونه این کار هم که توی نت تا دلت بخواد ریخته

سایت Codeproject هم از اینا زیاد داره
پ و
یادش بخیر سال 42 که از این کارا زیاد می کردم
یادمه دفعه اولی که نوشتن این جور کنترل ها را به شاگردام سر کلاس یاد دادم. وقتی که برنامه را اجرا کردن و نتیجه را دیدن یکی دو تا از دختر خانم های کلاس از فرط هیجان داشتن سنکوب می کردن !!! و دیگه به درس گوش نمی دادن و دائم رنگ های کنترل را با property هایی که ساخته بودن دائم عوض می کردن و برنامه را دوباره ران می کردن

regbyte
پنج شنبه 20 دی 1386, 00:14 صبح
با تشکر

اگر امکان دارد برای حالت دوم یک مثال بزنید.
چطور می تونم در MouseMove و یا MouseDown تغییرات را اعمال کنم؟

لطفا راهنمایی کنید.

Mahdi.Kiani
پنج شنبه 20 دی 1386, 09:19 صبح
با تشکر

اگر امکان دارد برای حالت دوم یک مثال بزنید.
چطور می تونم در MouseMove و یا MouseDown تغییرات را اعمال کنم؟

لطفا راهنمایی کنید.

دوست عزیز شما اون سایتی را که گفتم سر زدین؟
سرچ کردین؟

regbyte
پنج شنبه 20 دی 1386, 13:34 عصر
بله
اما دقیقا چیزی در این مورد پیدا نکردم.
اگر امکان دارد لطفا راهنمایی کنید.

Mahdi.Kiani
پنج شنبه 20 دی 1386, 14:34 عصر
بله
اما دقیقا چیزی در این مورد پیدا نکردم.
اگر امکان دارد لطفا راهنمایی کنید.

یه بار دیگه و با دقت بیشتری سایت Code Project (http://www.codeproject.com)جستجو کنید.
اونوقت اگه پیدا نکردین من چند تا لینک از همون سایت براتون میفرستم که بببینید که درست جستجو نکردین
اگه یاد بگیرین درست و با حوصله جستجو کنین (در هر موردی)، ان موقع می بینید که در مشکلات بعدیتون زودتر به جواب می رسین. چون به جای اینکه بخواین 5 دقیقه صرف تایپ کردن سوالتون کنید (سوالی که بار ها و بار ها مطرح شده و پاسخ های مربوطه هم داده شده) و 3 روز هم صبر کنید تا یکی را خدا برسونه که به سوالتون جواب بده، (آیا بده آیا نده :بامزه:) در عرض 1 مین یا شایدم خیلی کمتر از اون جوابتون را خودتون پیدا می کنین
درست است که forum محل مطرح کردن مشکلات هست و ... اما واقعا مشکلاتی که خودتون با نهایت تلاشتون نتونستین جوابی براش پیدا کنین. این هم یعنی اینکه وقتی باید یه سوالی را بپرسین که حداقل در استفاده از 6 تا موتور جستجوس قوی مثل گوگل و ... و سایت های برنامه نویسی و ... نتونسته باشین جواب خودتون را پیدا کرده باشین. که معمولا با همون سرچ اولی به احتمال 99% پیدا می کنین. البته اگه واقعا سرچ کنین!!!
اگر هم دقت کرده باشین خیلی از جواب هایی که به بعضی از دوستان داده میشه نتیجه جستجویی است که یا سوال کننده نتونسته خوب جستجو کنه و یا حال جستجو کردن را نداشت و شخص جواب دهنده براش جستجو می کنه و لینکش را براش میفرسته!!

پ و
در ضمن سایت codeproject فقط یکی از n تا سایتی است که .....

regbyte
پنج شنبه 20 دی 1386, 17:07 عصر
با تشکر از لطف شما
(صد در صد حق با شماست)
من دوباره جستجو کردم و چند تا مثال خوب نیز پیدا کردم، مثل:
http://www.codeproject.com/KB/buttons/XCtrls.aspx
اما نمی دانم کدام یک، از بهترین روش استفاده کرده،
من می خوام بهینه ترین و بهترین حالت رو پیش رو بگیرم، و یک سری کامپوننت برای خودم بسازم: Button , CheckBox , ComboBox و ...
تا در برنامه هام ازشون استفاده کنم.

اصول صحیح نوشتن این چنین کامپوننت هایی چیست؟
اگر امکان دارد منبع یا مثال ساده و کاملی در این زمینه به بنده معرفی نمایید.

با تشکر مجدد از شما

Mahdi.Kiani
پنج شنبه 20 دی 1386, 17:37 عصر
با تشکر از لطف شما

دکمه تشکر به همین جهت می باشد:بامزه: (شوخی کردم.. این ها همه وسیله برای یاد گیری از همدیگه هستن)


اصول صحیح نوشتن این چنین کامپوننت هایی چیست؟
اگر امکان دارد منبع یا مثال ساده و کاملی در این زمینه به بنده معرفی نمایید.


در مرحله اول بایستی به برنامه نویسی گرافیکی یه به قول برو بچ با GDI+ در دات نت آشنا بشی که کتاب های زیادی در این مورد نوشته شده که بگردی پیدا می کنی
اما به طور کل معمولا دو نکته کلی در نوشتن این جور کنترل ها وجود داره
1) استفاده از رویداد paint هر کنترل که باعث ترسیم کنترل میشه که میتونین اونو customize کنین
2) پیاده سازی رویداد های مربوطه که بسته به کنترل مورد نظر میتونه فرق کنه
البته نکات بسیار دیگری را هم بایستی مد نظر قرار بدین
مثلا یه نکته این میتونه باشه که مثلا وقتی در طراحی یک button از 2 رنگ برای حالت gradient و ... استفاده می کنین، این دو رنگ نباید محدود باشه و در واقع بایستی به صورت property پیاده سازی بشن تا در لیست property های مربوط به کنترل شما ظاهر بشه تا کاربر بتونه از هر 2 رنگی که خواست استفاده کنه
به عنوان مثال خیلی بد میشد که اگر قرار بود به جای انتخاب کردن رنگ backGround فرم همیشه مجبور به استفاده از یک رنگ(مثلا سفید بودیم) نه؟
و خوشبختانه دات نت شعور نسبتا بالایی داره!!! مثلا وقتی که شما یک property از نوع Color تعریف می کنین، این خاصیت در لیست خواص کنترل شما دقیقا مانند خواص رنگ دیگر کنترل ها است و کاربر میتونه هر رنگی و با هر RGB که بخواد استفاده کنه یا از رنگ های منطبق بر سیستم و ... استفاده کنه....
در واقع به نظر من هنر برنامه نویسی دات نت یعنی استفاده درست از امکاناتی که فراهم شده است. چون تقریبا فکر همه چیز شده (تقریبا)

نکته دیگه اینکه سعی بشه وقتی کاربر تغییرات مورد نظر را با property هایی که شما ایجاد کردین روی کنترل مورد نظر میده بتونه اونا را در Design time ببینه .. (خیلی بد میشه که بخوایم به ازاء هر تغییر در ظاهر یک کنترل برنامه را run کنیم نه !!!)

یا مثلا یه نکته دیگه که متاسفانه خیلی ها ازش استفاده نمی کنن استفاده از XmlDocument ها در کد هست
مثلا یه توضیح خیلی خوب برای یه رویدادی که شما برای کنترل خود تعریف می کنین و همچنین اضافه کردن توضیحاتی اینکه اون خاصیت یا رویداد یا هر چیز دیگه ممکنه که چه Exception هایی تولید کنه در استفاده راحت تر کاربر نهایی خیلی موثر خواهد بود.

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

نظر شخصی:
برنامه نویس حرفه ای کسی نیست که هر برنامه ای را که گفتین بنویسه،بلکه برنامه نویس حرفه ای به کسی می گن که درست برنامه بنویسه!!!! (دقت کردین که چرا توی کشور ما معمولا برنامه هایی که نوشته میشن و حتی خیلی هم جامع هستند و به خوبی هم کار می کنن،فقط یک نسخه از آنها منتشر میشه؟ به این دلیل هست که اون برنامه جوری نوشته شده هزینه نوشتن یه برنامه جدید با امکانات جدید به مراتب خیلی کمتر از هزینه upgrade کردن همون نرم افزار قبلیه !!! در صورتی که در همه جای دنیا عکس این عمل داره انجام میشه)که البته خیلی زمان میبره برای تبدیل شدن به یک برنامه نویس حرفه ای.


با تشکر مجدد از شما
حیف که بیشتر از یه بار نمیشه از یه نفر تشکر کرد وگر نه میگفتم بازم دکمه تشکر را بزنی :چشمک:

یا علی مدد