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

تبلیغات

تبلیغات متنی

صرافی ارکی چنج

صرافی rkchange

سایبان ماشین

دزدگیر منزل

تشریفات روناک

اجاره سند در شیراز

قیمت فنس

armanekasbokar

armanetejarat

صندوق تضمین

Future Innovate Tech

پی جو مشاغل برتر شیراز

لوله بازکنی تهران

آراد برندینگ

موسسه خیریه

واردات از چین

حمية السكري النوع الثاني

ناب مووی

دانلود فیلم

بانک کتاب

دریافت دیه موتورسیکلت از بیمه

قیمت پنجره دوجداره

بازسازی ساختمان

طراحی سایت تهران سایت

irspeedy

درج اگهی ویژه

تعمیرات مک بوک

دانلود فیلم هندی

قیمت فرش

درب فریم لس

زانوبند زاپیامکس

روغن بهران بردبار ۳۲۰

قیمت سرور اچ پی

خرید بلیط هواپیما

بلیط اتوبوس پایانه

قیمت سرور dl380 g10

تعمیرات پکیج کرج

لیست قیمت گوشی شیائومی

خرید فالوور

پوستر آنلاین

بهترین وکیل کرج

بهترین وکیل تهران

اوزمپیک چیست

خرید اکانت تریدینگ ویو

خرید از چین

خرید از چین

تجهیزات کافی شاپ

نگهداری از سالمند شبانه روزی در منزل

بی متال زیمنس

ساختمان پزشکان

ویزای چک

محصولات فوراور

خرید سرور اچ پی ماهان شبکه

دوربین سیمکارتی چرخشی

همکاری آی نو و گزینه دو

کاشت ابرو طبیعی و‌ سریع

الک آزمایشگاهی

الک آزمایشگاهی

 






آمار وبسایت

 تعداد کل بازدیدها : 1826684720




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

فراخواني توابع و روتين ها در ويژوال بيسيک -


واضح آرشیو وب فارسی:سایت ریسک: فراخواني توابع و روتين ها در ويژوال بيسيک uu99 28 بهمن 1386, 02:27در ادامه روند آموزش ویژوال بیسیک رسیدم به درس "انتقال داده ها" یه روال بصورت زیر نوشتیم : Private Sub EmployeeDisplay(strFirst As String, strLast As String) Dim strEmp As String strEmp = "my First Name is: " & strFirst & "And My Last Name is:" & _ strLast EmployeeDisplay = strEmp End Subحالا میخواهیم انتقال داده انجام بدیم : Private Sub Command 1_Click() Call EmployeeDisplay("Bill", "Gates") End Subروال EmployeeDisplay که نوشته شده چه کاری انجام میده و چه چیزهایی رو میشه ازش انتقال داد؟ با احضار روال EmployeeDisplay چه اتفاقی میفته ؟ دو رشته "Bill" و "Gates" که به عنوان آرگومان بعد از احضار روال وارد شدند ، کجا ذخیره میشن ؟ روند "انتقال داده" در این ماجرا به چه صورتی انجام میشه ، من متوجه نمیشم . با تشکر فراوان the_king 28 بهمن 1386, 04:08اول ببینیم این بابا چیکار می کنه : Private Sub EmployeeDisplay(strFirst As String, strLast As String) Dim strEmp As String strEmp = "my First Name is: " & strFirst & "And My Last Name is:" & _ strLast EmployeeDisplay = strEmp End Sub ما دو پارامتر ورودی داریم ولی روتین خروجی نداره چون با Sub تعریف شده و نه Function. پس تابع نیست و متغیری به نام EmployeeDisplay هم نداریم که بخواهیم چیزی داخل قرار بدیم. به همین دلیل این سطر در تابع اشتباه است : EmployeeDisplay = strEmp حالا فعلا به این اشتباه گیر نمی دیم، ببینیم در بقیه اش چه اتفاقی می افته. در متغیر strEmp دو پارامتر ورودی با هم ترکیب می شوند به طوری که اگه اسم آقای بیل گیتز را بهش بدیم تبدیل میشه به : my First Name is: BillAnd My Last Name is:Gates الان اشکال دوم که یک اشکال تکنیکی است معلوم شد، بین اسم کوچیک و عبارت And فاصله ای در نظر نگرفته ایم و شده BillAnd. پس بهتره توی عبارتی که با And شروع میشه یک کاراکتر فاصله اضافه کنیم. یکی هم بین دونقطه و Gates. بعد چی میشه؟ متغیر ترکیب شده strEmp رو می ریزه توی خروجی تابع (که البته باید اصلاح بشه چون الان تابع نیست) اما ما برای اصلاح کردن این روتین اونو به تابع تبدیل می کنیم، یعنی اولا که Sub باید تبدیل بشه به Function. ثانیا که چون ما دو رشته را با هم ترکیب می کنیم، خروجی باید از نوع String باشه. ثالثا متغیر strEmp یک متغیر واسطه است و میشه حذفش کرد، چون کمک خاصی نمیکنه و می تونیم انتقال به خروجی را یکسره و مستقیم کنیم : Private Function EmployeeDisplay(strFirst As String, strLast As String) As String EmployeeDisplay = "my First Name is: " & strFirst & " And My Last Name is: " & strLast End Function خب حالا ببینیم این فراخوانی تابع در دکمه Command 1 چیکار می کنه : Private Sub Command 1_Click() Call EmployeeDisplay("Bill", "Gates") End Sub از نظر دستوری کاملا درسته و دو پارامتر ورودی Bill و Gates را ارسال می کنه و ترکیب شده اش را تحویل می گیره، ولی خروجی تحویل گرفته شده را چیکار می کنه؟ هیچی می ریزه دور چون از خروجی تابع استفاده ای نشده. پس اگه اجرا بشه، نه چیزی نمایش داده می شه و نه چیزی تغییر می کنه. حالا چطور اصلاحش کنیم؟ راه های مختلفی وجود داره، مثلا با یک پنجره MessageBox خروجی تابع رو نشون بدیم : Private Sub Command 1_Click() MsgBox EmployeeDisplay("a", "b") End Sub یا اینکه قرارش بدیم داخل یک لیبل مثلا Label1 : Private Sub Command 1_Click() Label1.Caption = EmployeeDisplay("a", "b") End Sub uu99 28 بهمن 1386, 20:59جناب علی سعید ممنونم بابت توضیحات کامل و جامع شما . با توجه به اینکه فرق تابع و روتین در این هست که تابع همیشه مقداری رو برمیگردونه ولی روتین مقداری برنمیگردونه ، آیا استفاده از روتین برای "انتقال داده ها"کار منطقی هست یا نه ؟ استفاده از "انتقال داده" چه مزیتی داره ؟ مثال : Public Sub ProcByref(ByRef intArg1 As Integer, ByRef strArg2 As String) intArg1 = 20 strArg2 = "Gates" End Sub Private Sub Command 1_Click() Dim intRet As Integer Dim strRet As String intRet = 10 strRet = "Bill" Call ProcByref(intRet, strRet) Me.Print intRet Me.Print strRet End Sub مثال بالا بدون هیچ خطایی کار میکنه ولی من نمیدونم در چه مواردی بهتره از "انتقال داده" استفاده کنم!:neutral: با تشکر فراوان the_king 28 بهمن 1386, 23:37یک موقعی تابع بیشتر از یک خروجی داره، مثلا جواب معادله درجه دوم ممکنه دو جواب باشه، پس واسه این روتین بهتره از پارامتر ارجاعی استفاده کنیم یعنی Byref. اما اگه فقط یک خروجی داریم بهتره که از Function استفاده بشه که کد واضح تری داره و استفاده از تابع هم انعطافش بیشتر میشه. اما یک حالت دیگر هم هست که ارجاع با آدرس ByRef کاربرد داره، زمانی که پارامتر ورودی بزرگتر از یک واحده مثلا String که ممکنه طولانی باشه، اما اگه به عنوان مثال یک پارامتر ورودی Integer یا Double قرار نیست که تغییری بکنه، بهتره با ByVal باشه که هم امنیت داده اصلی بیشتر باشه و هم سرعت اجرا بالاتر باشه. برعکس در داده هایی که حجیم هستند، مثلا String ها بهتره که با Byref ارسال بشوند حتی اگه قرار نیست تغییر کنند. uu99 29 بهمن 1386, 00:29سلام این Syntax Error اشک منو درآورده هر کاری میکنم دستور زیر اجرا نمیشه فقط ارور میده Private Sub Command 1_Click() MsgBox ("You Must Enter a Valid Number", vbOKCancel + vbCritical, "Error") End Sub the_king 29 بهمن 1386, 02:21در مورد کاربرد پارانتر دقت کنید، وقتی شما یک تابعی مثل MsgBox را بدون استفاده از مقدار بازگشتی آن استفاده می کنید باید به شکل یک روتین Sub فراخوانی بشه یعنی با فرمان Call و یا بدون استفاده از پارانتر : MsgBox "You Must Enter a Valid Number", vbOKCancel + vbCritical, "Error" Call MsgBox("You Must Enter a Valid Number", vbOKCancel + vbCritical, "Error") پارانتر هایی که شما در دور پارامتر ها گذاشته اید، اونها را به یک پارامتر تبدیل کرده که خطا محسوب می شه.




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 2275]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن