PDA

مشاهده نسخه کامل : نحوه ي ساخت كامپوننت



ravegoat
08-07-09, 11:38
كامپوننت در حقيقت يك فرم ويندوز است كه كنترل هاي ديگر روي آن قرار مي گيرند و از آن مي توان به عنوان يك كنترل مستقل استفاده كرد.

براي ساخت كامپوننت ابتدا محيط Visual Studio را اجرا مي كنيم. براي ايجاد پروژه ي جديد كليد هاي تركيبي Ctrl+Shift+N را مي فشاريم. سپس در پنجره ي New Project در قسمت Project Type زبان Visual Basic و زير شاخه ي Windows را بر مي گزينيم. در ادامه در بخش Templates گزينه ي Windows Control Library را انتخاب مي كنيم. پس از تعيين يك نام براي طرح خود روي OK كليك مي كينم .

حال با فرم UserControl1.vb رو به رو مي شويم كه فرم اصلي طرح ما است. بر حسب نياز خود مي توانيد كنترل ها را روي اين فرم قرار دهيد. به علاوه تمام كد نويسي هاي ما نيز در بين Public Class اين فرم صورت مي گيرد.
كامپوننت مي تواند شامل خاصيت، متد، رويداد و متغير باشد:

خاصيت: ويژگي است كه به كنترل ما نسبت داده مي شود. به عنوان مثال اندازه كنترل (Size) يك خاصيت است.

متد: يک دستور است که عملي را براي ما انجام مي دهد. متد ها ممکن است داراي ورودي باشند که به آن ها آرگومان (پارامتر) مي گويند و متد ها معمولا مقداري را بر مي گردانند. به عبارت ديگر يک متد اطلاعاتي را دريافت مي کند، بر روي آن ها اعمالي انجام داده و در آخر اطلاعاتي را در اختيار ما قرار مي دهد.

رويداد: هر اتفاقي كه در كنترل مي افتد يك رويداد تلقي مي شود.

متغير: متغير بخشي از حافظه ي موقت است که مي تواند با توجه به نوع متغير مقاديري از اطلاعات را در خود نگه دارد.

نكته مهم: متد، رويداد و متغير را مي توان به دو گونه تعريف كرد؛ با استفاده از Private يا Public .
اگر هريك از موارد فوق با Private تعريف شوند، فقط در طول مراحل برنامه نويسي مي توانند مورد استفاده قرار گيرند و هرگز به كاربر نهايي نشان داده نمي شوند.
تعريف موارد فوق با Public سبب مي گردد كه آن مورد به كاربر نهايي (استفاده كننده) نشان داده شود.

تعريف خاصيت:




'تعريف اسم و نام متغير
Property [Property Name] As [Dimention]

Get
'دستوراتي كه هنگام درخواست خاصيت بايد اجرا شود
End Get

'تعريف آرگومان تنظيم شدن
Set(ByVal value)
'دستوراتي كه هنگام تنظيم خاصيت بايد اجرا شود
End Set
End Property

تعريف متد:

ما دو نوع متد متداول داريم: گونه ي که خود مي توانند مقداري را در خود ذخيره کنند و خود به عنوان يک متغير باشند و گونه اي ديگر که اين گونه نيستند.
ساختار گونه ي اول:



Private Function [Function Name](Parameter) As [Dimension]

End Function


ساختار گونه ي دوم:


Private Sub [Sub Name](Parameter)

End Sub


افزودن آرگومان به تابع در هر دو گونه يکسان است:


Private Sub [Sub Name](ByVal [ParameterName1] As [Dimension], ByVal [ParameterName2] As [Dimension], ...)

End Sub



تعريف رويداد:


Public Event [Event Name]


تعريف متغير:

Private [Dimention Name] As [Dimention]



پس از اتمام مراحل، با فشردن كليد F5 كامپوننت ساخته شده و با پسوند .dll در مسير ذخيره سازي پروژه قرار مي گيرد.
لطفا" به مثال توجه كنيد...

ravegoat
08-07-09, 11:53
بنده نام پروژه ي كامپوننت خود را MyCntrl قرار مي دهم. اين كنترل وظيفه دارد نام درايو هاي روي رايانه را به كاربر نشان دهد. در ادامه اسم فرم اصلي را از UserControl1.vb به MyDrive.vb تغيير مي دهم.
زير مجموعه System.IO را با دستور Imports System.IO وارد مي كنم.
من روي فرم MyDrive يك جعبه ليستي با نام ListBox1 را قرار مي دهم. اكنون كد نويسي آغاز مي شود:

تعريف متغير DriveCount:
اين متغير تعداد درايو هاي شناسايي شده را در خود ذخيره مي كند. چون قصد داريم اين متغير را در اختيار كاربر بگذاريم، تعريف با Public صورت مي گيرد:




Public DriveCount As Integer




تعريف رويداد DriveUpdate:
اين رويداد زماني رخ مي دهد كه ليست درايو ها آپديت شود. چون قصد داريم اين متغير را در اختيار كاربر بگذاريم، تعريف با Public صورت مي گيرد:



Public Event DriveUpdate()



تعريف متد Mailer:
اين متد يك ايميل را با عنوان Subject براي آدرس مشخصي مي فرستد. بنده از اين متد زماني استفاده مي كنم كه در كامپوننت خطايي رخ دهد. در صورت بروز خطا در كنترل، Mailer اجرا مي شود و متن خطا را به ايميل برنامه نويس مي فرستد. لزومي ندارد كه Mailer در اختيار كاربر نهايي باشد درنتيجه تعريف با Private صورت مي گيرد. توجه داشته باشيد كه Subject پارامتر متد محسوب مي شود:







Private Sub Mailer(ByVal Subject As String)

Process.Start("mailto:address@domain.com?Subject=Error: " + Subject)
End Sub

تعريف متد Updator:
اين متد نام درايو ها را درون جعبه ليستي قرار مي دهد (به عبارت ديگر ليست درايو ها را در جعبه آپديت مي كند). چون كاربر نيز به اين متد نيازمند است از Public استفاده مي كنم:





Public Sub Updator()

Try
تعداد درايو ها در متغير DriveCount ذخيره مي شود'
DriveCount = DriveInfo.GetDrives.Length

ListBox1.Items.Clear()
نام درايو ها در جعبه ي ليستي وارد مي شود'
For iDrive As Integer = 0 To DriveCount - 1

ListBox1.Items.Add(DriveInfo.GetDrives(iDrive).Nam e)

Next
رويداد DriveUpdate رخ مي دهد'
RaiseEvent DriveUpdate()

Catch ex As Exception
در صورت بروز خطا Mailer اجرا مي شود و پيام خطا را با عنوان Subject ارسال مي كند'

Mailer(ex.Message)

End Try



End Sub








تعريف خاصيت BGColorBox:
اين خاصيت رنگ پس زمينه ي جعبه ي ليستي را بر مي گرداند و يا ست مي كند:






Property BGColorBox() As Color

Get
Return ListBox1.BackColor

End Get
Set(ByVal BGColor As Color)

ListBox1.BackColor = BGColor

End Set
End Property








تعريف خاصيت FColorBox:
اين خاصيت رنگ متن جعبه ي ليستي را بر مي گرداند و يا ست مي كند:




Property FColorBox() As Color

Get
Return ListBox1.ForeColor

End Get
Set(ByVal FColor As Color)

ListBox1.ForeColor = FColor

End Set
End Propert


هر دو خاصيت مذكور در قسمت Properties كنترل قابل مشاهده هستند.
در نهايت در رويداد FormLoad متد Updator را قرار مي دهيم تا با بارگذاري فرم، درايو ها در ListBox ديده شوند.

اكنون كامپوننت را كامپايل مي كنيم...

ravegoat
08-07-09, 12:08
پس از پايان مرحله ي كامپايل، با ويژوال استاديو يك پروژه ي جديد ايجاد مي كنيم. فايل ساخته شده را (MyCtrl.dll) روي Toolbox ويژوال استاديو مي كشيم و رها مي كنيم (Drag & Drop) . از اين به بعد كنترل ما همواره تحت نام MyDrive (نام فرم اصلي) در جعبه ابزار ديده مي شود و ما مي توانيم از آن در برنامه هاي خود استفاده كنيم.
گرچه كامپوننت ما با VB.Net نوشته شده اما مي توان در پروژه هاي سي شارپ هم از آن استفاده كرد.:cool:

نكته: اگر يک كامپوننت را با VS 2008 (ويژوال استاديو) کامپايل کنيم نمي توانيم از آن كامپوننت در VS 2005 استفاده کنيم. اما اگر يک كامپوننت را با VS 2005 کامپايل کنيم مي توانيم از آن در VS 2008 استفاده کنيم. اين مطلب براي ساير نسخه هاي VisualStudio هم صدق مي كند.

سورس كامل MyCtrl با حجم 17 كيلوبايت (VB.Net 2005) (Only the registered members can see the link)

پيشنهاد مي كنم اين سورس را دانلود و سپس بررسي كنيد چون اين گونه آموخته هايتان مسنجم تر مي شود.
مرور دوباره ي اين مطالب نيز خالي از لطف نيست:great::


Only the registered members can see the link
Only the registered members can see the link



هر نوع پرسش و يا نظري داشتيد، در خدمتم.:1. (40):

شاد و سربلند باشيد
آرمين:11():