در این بخش می خواهیم در مورد توابع و انواع توابع ، نحوه استفاده از آنها را آموزش دهیم.
برای ادامه روی "ادامه متن" کلیک کنید.
زیر برنامه
تعریف کلی:
زیر برنامه بخشی از برنامه است به صورت مجزا تعریف می شوند تا در صورت نیاز در دیگر قسمت های برنامه بتوان از آن ها استفاده کرد به طور کلی با استفاده از زیر برنامه میتوان برنامه را به چند قسمت تعریف کرد تا نحوه کنترل کد ها برای ما راحت تر باشد و از کارهای تکراری هم جلوگیری شود.
انواع زیر برنامه:
در ویژوال بیسیک دو نوع زیر برنامه داریم یکی Procedure (روال) و دیگری Function (تابع) که البته تابع هم مثل روال است با این تفاوت که تابع حتما باید مقدار برگشتی داشته باشد ولی روال هیچ مقدار برگشتی ندارد.
به مثال زیر توجه کنید ما در اینجا قطعه کدی نوشتیم که وقتی کاربر دکمه ذخیره را کلیک کرد دکمه ذخیره و بعضی ازTextBox ها غیر فعال شوند و اگر دکمه جدید را کلیک کرد دوباره دکمه ذخیره و بقیه TextBox هم فعال شوند.
قطعه کد مربوط به دکمه ذخیره کردن:
cmdSave.Enabled = False
txtName.Enabled = False
txtLastName.Enabled = False
txtPhone.Enabled = False
txtAddress.Enabled = False
cmdNew.Enabled = True
قطعه کد مربوط به دکمه جدید:
cmdSave.Enabled = True
txtName.Enabled = False
txtLastName.Enabled = False
txtPhone.Enabled = False
txtAddress.Enabled = False
cmdNew.Enabled = False
حال فکر کنید بخواهیم در دیگر قسمت های دیگر برنامه هم با کلیک کردن بر روی دکمه دیگری همین تغیرات اعمال شوند به نظر شما باید چه کاری انجام داد آیا باید دوباره همین کد ها رو تایپ کنیم یا تمام کد ها را کپی کردن و در هر جایی که خواستیم Paste کنیم
شاید این کار خیلی راحت باشد ولی توجه کنید ما می خواهیم یک خط کد جدید به این قطعه کد ها اضافه کنیم باید دوباره در هر جایی که از این کد ها استفاده کردیم این قطعه جدید اضافه کنیم به نظر شما این کار مشکل نیست.
ولی میتوان این مشکل را به وسیله زیر برنامه ها حل کرد فقط کافی است که این زیر برنامه ها رو در یک بلوک جدید اضافه کنید تا هر وقت که خواستید از این کد استفاده کنید آن را صدا بزنید. شکل کلی دستور برای تعریف زیر برنامه بدین صورت است:
Private Sub اسم روال ()
….
End Sub
برای تعریف زیر برنامه فقط کافی است که در هر جایی که دارید کد می نویسید در یک خط خالی دستور بالا را بنویسید.
حالا ما میخواهیم همان قطعه کد های قبلی را به عنوان یک زیر برنامه تعریف کنیم:

حالا وقتی که خواستید از این قطعه کد در هر جایی از فرم استفاده کنید فقط کافی است این قطعه کد را صدا بزنید حتما می پرسید که چطوری این قطعه کد را صدا بزنیم نحوه صدا کردن روال بدین صورت است:
Call نام روال
حالا ما می خواهیم قطعه کد قبلی را صدا بزنیم:
Call Save
البته می توانید کلمه Call را هم قید نکنید ولی اگر قید بکنید خوانایی برنامه بالاتر می رود.
حالا هر وقت که خواستید که تغییراتی در قطعه کد روال بدهید فقط کافی است به آن روال بروید و هر تغییری که در این قطعه کد بدهید در هر جای دیگری که از این روال استفاده کرده باشید آن جا هم این تغییرات اعمال می شود.
Function (تابع (:
همان طور که در ابتدای فصل هم گفتم تابع هم مانند روال است با این تفاوت که تابع باید مقدار برگشتی داشته باشد
شکل کلی دستور استفاده از زیر برنامه Function (تابع):
Private Function نام تابع () As نوع مقدار برگشتی
....
End Function
در این جا نوع مقدار برگشتی باید یکی از انواع داده باشد مثل Integer , Single , Byte ,String و غیره....
به عنوان مثال ما میخواهیم تابعی بنویسیم که عدد اولی را به توان عدد دومی برساند و به وسیله یک MsgBox آن را به کاربر نمایش دهیم:
Private Function Pow() As Long
Dim intNumber1 As Integer
Dim intNumber2 As Integer
Dim Result As Long
intNumber1 = 5
intNumber2 = 2
Result = intNumber1 ^ intNumber2
Pow = Result
End Function
حالا ما این تابع را نوشتیم و میخواهیم به وسیله یک MsgBox آن را به کاربر نمایش دهیم:
Private Sub Command1_Click()
MsgBox Pow
End Sub

تحلیل کد:
اول دو تا متغییر تعریف کردیم که بتوانیم عدد ها رو در آنها ذخیره کنیم سپس یک متغییر هم برای اینکه جواب را در آن ذخیره کنیم و سپس بعد از به توان رساندن عدد اول به عدد دوم آن را در متغییر Result ذخیره کردیم و در آخر هم مقدار Result را درون نام تابع قرار دادیم تا بتواند نتیجه نهایی را برگشت دهد.
پاس کردن مقدار به زیر برنامه:
زیر برنامه علاوه بر اینکه می تواند عملی را انجام دهد و یا مقداری را برگشت دهد می تواند چندین مقدار هم بگیرد.مثال به توان رساندن عدد اول به عدد دوم را به خاطر بیاورید در آن مثال فقط عدد 5 به توان عدد 2 میرسید حالا ما میخواهیم کاری کنیم که اگر هر عدد که به آن دادیم(Pass) کردیم آن اعداد را به توان همدیگر برساند:
Private Function Pow(Num1 As Integer, Num2 As Integer) As Long
Dim Result As Long
Result = Num1 ^ Num2
Pow = Result
End Function
در این جا دو مقدار به تابع توان دادیم یکی Num1 و دیگری Num2 که هر دو از نوع Integer هستند.شما میتوانید به هر مقدار که لازم دارید مقدار برای زیر برنامه تعریف کنید.
Private Function Pow(n1 As Integer,n2 as Integer,…….) As Long
…..
End Function
یک مثال هم برای نمایش پیغام به کاربر به وسیله روال(Procedure):
Private Sub ShowMSG(strMSG As String)
MsgBox strMSG
End Sub


بعد اجرا شدن روال ShowMSG
روال Public(عمومی) یا Private (خصوصی)
تا اینجا ما هر زیر برنامه ای که نوشتیم فقط در همان فرم می توان از آن زیر برنامه استفاده کرد و اگر خواسته باشید که از زیر برنامه در فرم های دیگر استفاده کنید باید از زیر برنامه های عمومی استفاده کنید تا در همه جای برنامه قابل صدا کردن باشد.
شکل کلی نوشتن زیر برنامه های عمومی به این صورت که به جای کلمه Private که نوشتیم باید از کلمه Public استفاده کرد:
Public Function Pow(Num1 As Integer, Num2 As Integer) As Long
Dim Result As Long
Result = Num1 ^ Num2
Pow = Result
End Function
این تابع را از هر جایی از برنامه که صدا بزنید می توانید از آن استفاده کنید البته دقت کنید که این تابع را نباید درون فرم بنویسید چون به صورت عمومی هست باید را درون یک ماژول(Module) بنویسید که در اینجا نحوه نوشتن زیر برنامه درون ماژول را توضیح میدهم
برای نوشتن زیر برنامه درون یک ماژول باید ابتدا یک ماژول جدید تعریف کنید کافی است دز پنجره Project راست کلیک کنید و یک منو نمایش داده می شود سپس روی گزینه Add بروید و بعد از آن گزینه Module را کلیک کنید حالا یک صفحه نمایش داده میشود روی دکمه Open کلیک کنید تا یک ماژول جدید به پروژه اضافه شود


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

حالا ما قطعه کد توان را درون این ماژول می تویسیم:

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