كامپوننت در حقيقت يك فرم ويندوز است كه كنترل هاي ديگر روي آن قرار مي گيرند و از آن مي توان به عنوان يك كنترل مستقل استفاده كرد.
براي ساخت كامپوننت ابتدا محيط 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 SetEnd 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 در مسير ذخيره سازي پروژه قرار مي گيرد.
لطفا" به مثال توجه كنيد...
بنده نام پروژه ي كامپوننت خود را 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 - 1ListBox1.Items.Add(DriveInfo.GetDrives(iDrive).Name)Next رويداد DriveUpdate رخ مي دهد' RaiseEvent DriveUpdate()Catch ex As Exception در صورت بروز خطا Mailer اجرا مي شود و پيام خطا را با عنوان Subject ارسال مي كند'Mailer(ex.Message)End TryEnd Sub
تعريف خاصيت BGColorBox:
اين خاصيت رنگ پس زمينه ي جعبه ي ليستي را بر مي گرداند و يا ست مي كند:
کد:Property BGColorBox() As ColorGet Return ListBox1.BackColorEnd Get Set(ByVal BGColor As Color)ListBox1.BackColor = BGColorEnd Set End Property
تعريف خاصيت FColorBox:
اين خاصيت رنگ متن جعبه ي ليستي را بر مي گرداند و يا ست مي كند:کد:Property FColorBox() As ColorGet Return ListBox1.ForeColorEnd Get Set(ByVal FColor As Color)ListBox1.ForeColor = FColorEnd Set End Propert
هر دو خاصيت مذكور در قسمت Properties كنترل قابل مشاهده هستند.
در نهايت در رويداد FormLoad متد Updator را قرار مي دهيم تا با بارگذاري فرم، درايو ها در ListBox ديده شوند.
اكنون كامپوننت را كامپايل مي كنيم...
MoBiN.R (12-07-09)
پس از پايان مرحله ي كامپايل، با ويژوال استاديو يك پروژه ي جديد ايجاد مي كنيم. فايل ساخته شده را (MyCtrl.dll) روي Toolbox ويژوال استاديو مي كشيم و رها مي كنيم (Drag & Drop) . از اين به بعد كنترل ما همواره تحت نام MyDrive (نام فرم اصلي) در جعبه ابزار ديده مي شود و ما مي توانيم از آن در برنامه هاي خود استفاده كنيم.
گرچه كامپوننت ما با VB.Net نوشته شده اما مي توان در پروژه هاي سي شارپ هم از آن استفاده كرد.برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
نكته: اگر يک كامپوننت را با VS 2008 (ويژوال استاديو) کامپايل کنيم نمي توانيم از آن كامپوننت در VS 2005 استفاده کنيم. اما اگر يک كامپوننت را با VS 2005 کامپايل کنيم مي توانيم از آن در VS 2008 استفاده کنيم. اين مطلب براي ساير نسخه هاي VisualStudio هم صدق مي كند.
سورس كامل MyCtrl با حجم 17 كيلوبايت (VB.Net 2005)
پيشنهاد مي كنم اين سورس را دانلود و سپس بررسي كنيد چون اين گونه آموخته هايتان مسنجم تر مي شود.
مرور دوباره ي اين مطالب نيز خالي از لطف نيستبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید :
http://pcnetwork.ir/showpost.php?p=126652&postcount=2
http://pcnetwork.ir/showpost.php?p=89748&postcount=2
هر نوع پرسش و يا نظري داشتيد، در خدمتم.برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
شاد و سربلند باشيد
آرمينبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
'چو ایران نباشد، تن من مباد
Dim Armin As Iranian
If Iran.Enabled = False Then Armin.Enabled = False
ehsanbayest (18-09-09), MoBiN.R (12-07-09)
1 کاربر در حال مشاهده این موضوع. (0 عضو و 1 میهمان)
Bookmarks