1. مهمان گرامی، جهت ارسال پست، دانلود و سایر امکانات ویژه کاربران عضو، ثبت نام کنید.
    بستن اطلاعیه

آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

شروع موضوع توسط minaaa ‏11/11/11 در انجمن VB

  1. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    كادرهاي پيام و ورودي

    ويژوال بيسيك چندين تابع توكار دارد كه وظايف بسياري از جمله عمليات مرسوم رياضي و رشته اي را براي ما انجام ميدهند.
    بعضي از اين توابع نيز كارهاي ورودي و خروجي راانجام ميدهند.

    نكته : تابع ، روالي است كه يك يا چند متغير به عنوان آرگومان مي پذيرد و يك نتيجه را بر مي گرداند.همانند تابع Abs به معني قدر مطلق.

    مروري بر MsgBox و InputBox

    وقتي كه لازم باشد تا از كاربر سوالاتي پرسيده شود يا پيامهاي خطائي و اطلاعاتي به كاربر دهيد مجبوريد از كادرهاي پيام و يا ورودي استفاده كنيد.حتما زماني كه با خط دايال آپ خود قصد اتصال به اينترنت را داشته ايد خطاهاي مرسوم مودم را اعم از اشغال خط و ... ديده ايد.
    تمامي اين پيامها در كادرهاي پيام به شما داده مي شوند.
    به عنوان مثال اگر كاربر داده اي را به اشتباه وارد كند شما با بررسي اطلاعات وارد شده مي توانيد صحت و سقم اطلاعات وارد شده را توسط كادرهاي پيام به كاربر اطلاع دهيد.
    همچنين با كنترل كادرهاي متني قبلا آشنا شديد و دانستسد كه براي دريافت اطلاعات بسيار مناسب هستند اما همواره اين كادر ها به كار نمي آيند.كادرهاي ورودي براي پرسيدن سوالاتي كه تنها تحت شرايط خاص بروز مي كنند بسيار مناسب هستند.
    كادر هاي ورودي هميشه فضائي را براي پاسخگوئي كاربر به سوالات فراهم مي آورند.

    بررسي ( )MsgBox

    هميشه تابع MsgBox را به يك متغير صحيح منسوب سازيد .متغير مقدار بازگشتي را نگه خواهد داشت و آن مقدار مشخص كننده دكمه اي است كه كاربر فشرده استتا بر مبناي آن تصميم گيري شود.
    در قسمت پائيين كادر متني مي تواند دكمه هاي مختلفي اعم از OK ، Yes,No و... بسته به انتخاب برنامه نويس وجود داشته باشد.
    در اينجا قالب اين تابع را ميبينيد:
    ([[Message=MsgBox (strMsg,[,[intType],strTitle
    strMsg يك رشته است ، يك متغير يا يك ثابت رشته اي به عنوان پيام كه در كادر متني نمايش مي يابد.
    intType : مقدار عددي يا عبارتي است كه گزينه هائي كه در كادر پيام مي خواهيد را نمايش مي دهند.
    اهم اين عبارات و اعداد عبارتند از:
    vbOkonly يا مقدار 0 كه دكمه Ok را نمايش ميدهد.
    vbOkCancel يا مقدار 1 كه دكمه هاي Ok , ‍Cancel را نمايش مي دهد.
    vbAbortRetryIgnore يا مقدار 2 كه دكمه هاي Abort و Retry , Ignore را نمايش مي دهد.
    vbYesNoCancel يا مقدار 3 كه دكمه هاي Yes , No, Cancel را نمايش مي دهد.
    و...
    همچنين شما مي توانيد از شمايل متنوعي با توجه به پيام داده شده انتخاب نمائيد.به عنوان مثال اگر پيامتان يك پيام خطائي است از vbCritical واگر سوالي است از vbQuestion و اگر اطلاع رساني است از vbInformation استفاده كنيد.

    نكته مهم : اگر خواستيد از دو يا جند انواع دكمه و شمايل استفاده كنيد بين انها علامت "+" را قرار دهيد.

    و در نهايت strTitle رشتهاي اختياري است كه نشان دهنده متن درون نوار عنوان كادر متني است.
    به عنوان مثال اگر يك كد براي اجراي يك كادر پيام به شكل زير بنويسيد بايد هنگام اجرا شكلي همانند شكل زير داشته باشد.
    Message = MsgBox("Are you reday for report?", vbQuestion + vbYesNo, "Report Request")

    [​IMG]

    اما مقادير بازگشتي MsgBox به شرح ذيل است:
    1 : كاربر دكمه Ok را فشرده است.
    2 : دكمه Cancel
    3 : دكمه Abort
    4 : دكمه Retry
    5 : دكمه Ignore
    6 : دكمه Yes
    7 : دكمه No

    بررسي InputBox

    اين تابع بسيار ساده است زيرا خيلي شبيه تابع MsgBox عمل مي كند.
    قالب اين تابع به شكل زير است:
    ([[[strVariable=InputBox(strPrompt[,[strTitle][,strDefault][,intXpos,intYpos

    strPrompt دقيقا همان پيامي است كه چاپ مي شود ، strTitle عنوان درون نوار عنوان ، strDefault مقدار رشتهاي پيش گزيده درون كادر ورودي و intXpos,intYpos مختصات قرار گرفتن كادر ورودي روي صفحه مانيتور شماست.
    نكته: عباراتي كه در قالب پيام به صورت [ ] مي بينيد optional هستند و استفاده از انها دلبخواهي است همانند همين مختصات قرار گرفتن كادر ورودي.

    كد زير اگر اجرا شود كادر ورودي همانند شكل زير خواهيد داشت:

    ("Message = InputBox("what is your name?", "Name request", "Ali​

     
  2. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    عملگرهاي مقايسه اي و احكام شرطي 1

    عملگرهاي مقايسه اي عملگرهائي هستند كه مقادير داده اي را با يكديگر مورد مقايسه قرار مي دهند و نتايج درست يا غلط را باز مي گردانند.

    در ويژوال بيسيك 6 عملگر مقايسه اي داريم به شرح زير:
    < : عملگر بزرگتر
    > : عملگر كوچكتر
    = : عملگر برابر يا تساوي
    =< : عملگر بزرگتر مساوي
    => : عملگر كوچكتر مساوي
    <> : عملگر نامساوي

    عملگر هاي مقايسه اي مي توانند متغير ها ، لفظ ها ، مقادير كنترل ها و .... را مقايسه نمايند.

    نكته : هنگامي كه رشته ها را با هم مقايسه مي كنيد ويژوال بيسيك از جدول اسكي براي تعيين نحوه مقايسه كاراكتر ها استفاده مي كند.

    حكم IF :

    مهمترين حكم شرطي در يك برنامه حكم IF است . با منطقي كه اين حكم به وجود مي آورد برنامه كاربردي مي تواند شروع به تجزيه و تحليل داده هاي شامل عملگرهاي مقايسه اي و انجام تصميم گيري ها بر اساس آن تجزيه تحليل ها كند.

    حكم IF شامل دو قسمت مهم بررسي شرط با IF و بدنه حكم IF است.
    قالب حكم IF به شكل زير است:
    کد:

    IF comparision Then One or more VB statments End IF
    End IF به ويژوال بيسيك مي گويد كه بدنه حكم IF در كجا به پايان مي رسد.فرض كنيد كاربري مقدار فروش را در كنترل كادر متني به نام txtSales وارد مي كند. IF زير مقدار پاداش بر اساس فروش را محاسبه مي كند
    کد:

    IF (txtSales.Text > 5000) Then sngBonus=txtsales.Text * 0.12 End IF
    نكته : در بدنه حكم IF مي تواند بيش از يك خط دستور يا كد قرار بگيرد.

    نكته مهم : IF تك خطي نياز به End IF ندارد به شرطي كه حكم IF بعد از Then نوشته شود.

    شاخه Else حكم IF

    در حالي كه حكم IF كد را در صورت درست بودن مقايسه اجرا مي كند Else در صورت درست نبودن حكم IF حكم هاي مربوط به خود را اجرا مي كند.به قطعه كد زير توجه كنيد:

    روي فرم دو عددكنترل كادر متني به اضافه يك دكمه فرمان قرار دهيد و كد زير را در رويه كليك دكمه فرمان بنويسيد.

    کد:
    کد:

    Private Sub Command1_Click() If Val(Text1.Text) >= Val(Text2.Text) Then Text1.BackColor = vbBlue Text2.BackColor = vbWhite Else Text1.BackColor = vbWhite Text2.BackColor = vbBlue End If End Sub ​

    هنگام فشردن دكمه اگر مقدار عددي وارد شده در كنترب كادر متني يك از دو بيشتر بود رنگ زمينه اين كنترل به آبي تغيير پيدا خواهد كرد و رنگ زمينه كنترل كادر متني دو به سفيد ولي اگر مقدار عددي كنترل كادر متني دو بزرگتر از يك بود بالعكس.

     
  3. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    عملگرهاي مقايسه اي و احكام شرطي 2

    اميدوارم تا اين قسمت آموزشها مورد توجه قرار گرفته باشد.در ادامه بحث به مقايسات مركب با عملگرهاي منطقي و انتخابهاي شرطي select case خواهم پرداخت.

    مقايسات مركب با عملگرهاي منطقي

    ويژوال بيسيك داراي سه عملگر ديگر نيز كه به عملگرهاي منطقي معروفند ميباشد
    And , Or , Not اين عملگرها هستند.عملگرهاي منطقي امكان ادغام دو يا چند آزمايش مقايسه اي را به صورت يك مقايسه مركب فراهم مي آورند.
    عملگر And باعث مي شود كه دو عبارت شرطي با هم تركيب شوند ونتيجه درست اين عبارت مركب تنها در صورتي محق خواهد شد كه هر دو عبارت شرطي درست باشند.
    عملگر Or نيز باعث تركيب دو عبارت شرطي مي شود ولي با اين تفاوت كه هرگاه تنها يك عبارت از ظر منطقي ارزش درست داشته باشد كل عبارت تركيبي درست خواهد بود.
    و عملگر Not هم آزمايش مقايسه اي را معكوس مي سازد.
    به مثالهاي زير توجه كنيد.

    کد:

    If (sngsals > 5000) And (intvalue > 10000) Then intsum = 50End If
    در مثال بالا زماني در متغير intsum مقدار 50 قرار خواهد گرفت كه هم sngsales بزرگتر از 5000 باشد و هم intvalue بزرگتر از 10000 کد:

    If Not (sngsals > 5000) Then intsum = 50 End If​

    در مثال بالا هم زماني در intsum مقدار 50 قرار خواهد گرفت كه sngsales از 5000 بزرگتر نباشد.

    چندين انتخاب با Select Case

    حكم IF براي مقايسه داده اي در حالتي كه يك يا دو آزمايش مقايسه اي بايد صورت پذيرد بسيار مناسب است وليكن وقتي كه بايد آزمايشهائي را با بيش از دو شرط انجام دهيد نگهداري IF بسيار دشوار مي گردد.عملگرهاي منطقي نيز تنها در نوع هاي خاصي از شروط مي توانند مفيد باشند.
    در اوقات ديگر بايد چندين حكم IF..Else در درون يكديگر قرار دهيد.
    سريعترين راه ياد گيري Select Case ديدن يك مثال است.

    کد:

    Select Case intAge Case Is < 6: MsgBox "Kindergarten" Case 6: MsgBox "1st Grade" Case 7 To 11: MsgBox "2st Grade" Case Else: MsgBox "Advanced" End Select
    در همين مثال فوق 4 قالب مختلف Select Case آمده است.
    در خط اول نوع متغير كه intAge است به حكم Select Case معرفي شده است كه بر اساس مقدار آن تصميم گيري شود.
    در خط دوم اگر سن مورد نظر كمتر از 6 باشد عبارت "Kindergarten" نمايش مي يابد.
    در خط دوم اگر مقدار صرفا 6 سال باشد عبارت "1st Grade" نمايش مي يابد.
    در خط سوم به ازاي سن بين 7 تا 11 سال عبارت "2st Grade" نمايش مي يابد.
    در خط چهارم هم اگر مقدار intAge هيچكدام از اين مقادير نباشد عبارت "Advanced" نمايش داده خواهد شد.
    و در نهايت در خط پنجم با دستور End Select قالب حكم به پايان مي رسد. توجه داشته باشيد كه بايد دستور پايان دادن به قالب Select Case حتما در پايان بدنه حكم نوشته شود.
     
  4. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    حلقه ها در ويژوال بيسيك 1

    تا كنون با منطق ترتيبي و تصميم گيري آشنا شده ايد . در ادامه آموزش مقدماتي ويژوال بيسيك 6 به تحليل و استفاده از حلقه ها در ويژوال بيسيك مي پردازيم.حلقه ها نقش مهمي در برنامه ها ايفا مي كنند زيرا در بيشتر اوقات لازم خواهد بود كه بخشهائي از از يك برنامه را براي پردازش چندين مقدار داده اي تكرار كنيد.به عنوان مثال ممكن است لازم باشد كه هزينه اي را براي تمامي مشتريان خود محاسبه كنيد.يك حلقه مي تواند مشخصات هر مشتري را بخواند و هزينه مربوط به او را محاسبه كند.

    حلقه هاي Do While

    حلقه Do While در ويژوال بيسيك به طرق مختلف مورد استفاده قرار مي گيرد.اين دستور همانند دستور IF با عباران مقايسه اي كه در درسهاي قبل فرا گرفتيد كار مي كند.يك حلقه هميشه شامل چندين و يا يك خط حكم است كه داراي خطوط و شروع و پايان مشخصي خواهد بود.قالب حكم Do While همانند زير است:

    کد:

    Do While (comparison test) Block of one or more Visual Basic statments Loop

    مادامي كه comparison test درست است بلوك كد به چرخيدن ادامه مي دهد.براي خروج از حلقه حتما بايد comparison test غلط شود والا برنامه گرفتار حلقه نامتناهي يعني حلقه اي كه هيچ گاه به پايان نمي رسد خواهد شد.

    نكته: براي خروج از حلقه نامتناهي از كليد هاي تركيبي Ctrl+Break استفاده كنيد.

    در مثال زير تا زماني كه مقدار i به كمتر از 5 نرسد برنامه از حلقه خارج نمي شود:

    کد:
    کد:

    Private Sub Form_Load() i = 10 Do While i > 5 i = i - 1 MsgBox i Loop End Sub



    حلقه Do Until

    برعكس حلقه Do While كه تا زماني كه نتيجه شرط درست باشد در حلقه مي ماند حلقه Do Until تا زماني آزمايش مقايسه اي غلط باشد در حلق مي ماند.
    قالب حكم Do Until مانند زير است:

    کد:

    Do Until (comparison test) Block of one or more Visual Basic statments Loop
    به اين مثال توجه كنيد:

    کد:
    کد:

    Private Sub Form_Load() i = 10 Do Until i < 5 MsgBox i i = i - 1 Loop End Sub ​

    در اين مثال تا زماني كه مقدار i كمتر از 5 نشود برنامه از حلقه خارج نخواهد شد.

    كدام حلقه بهترين است؟

    از حلقه هائي استفاده كنيد كه بهترين و در جايگاه خود مناسبترين باشد.در واقع هيچ مزيت فني بين آنها وجود ندارد و تنها بسته به زمان استفاده هر كدام ممكن است در اولويت قرار بگيرند.
     
  5. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    حلقه ها در ويژوال بيسيك 2

    تا اينجاي كار با پاره اي از حلقه ها خصوصا آنهائي كه با Do در ارتباط بودند آشنا شديد .
    حال به باقي حلقه هاي مرتبط به Do و حلقه هاي ديگر مي پردازيم.

    ديگر حلقه هاي Do

    دو جور ديگر از اين نوع حلقه ها وجود دارند كه درست مانند دو حلقه قبلي كار مي كنند.
    Do...Loop While و Do Loop Until بسيار شبيه به همتاهاي خود هستند كه در قبل ديديد.اما اين قالبهاي جديد ،آزمايشهاي مقايسه اي خود را به جاي ابتداي حلقه در پائين حلقه انجام ميدهند.
    اگر حلقه با يك حكم Do آغاز گردد،يا با Loop While و يا با Loop Until خاتمه مي يابد.
    قالب Do....Loop While را مشاهده مي فرمائيد.

    کد:

    Do Block of one or more Visual Basic statements
    (Loop while (comparison test​

    در اين حالت Do تنها به نظر مي رسد ولي اين طور نيست مقصود از Do شروع حلقه اي است كه در انتها به حكم آزمايشي Loop While مي رسد.در اين حالت و با اين نوع بدنه حلقه ، بدنه حلقه حداقل يكبار اجرا مي گردد.مادامي كه comparison test درست باقي بماند بدنه حلقه بيش از يكبار اجرا مي گردد.
    حكم Do...Loop Until دقيقا مشابه بالائي است ولي در صورت غلط بودن نتيجه آزمايش حلقه بيش از يكبار اجرا مي گردد.

    حلقه For

    حلقه For نيز براي ايجاد گردش مورد استفاده قرار مي گيرد.(از نظر شخص من بسيار كاربردي تر از حلقه هاي منتسب به Do است).يك حلقه مناسب كه كمي مشكل تر از حلقه Do است ولي هنگامي كه به آن تسلط يافتيد در پياده سازي آن مشكل كمي خواهيد داشت.
    يك حلقه For هميشه با حكم For آغاز مي گردد و با حكم Next خاتمه مي يابد.قالب حلقه For به شكل زير است:
    کد:

    For Countvar= Startval To Endval [step Incrementval] Block of one or more Visual Basic statements Next
    مثالي ساده مي تواند در نشان دادن نحوه كار حلقه For كمك نمايد.
    در اين مثال مجموع اعداد 1 تا 10 محاسبه مي گردد.

    کد:
    کد:

    Private Sub Form_Load() intsum = 0 For intNumber = 1 To 10 intsum = intsum + intNumber Next MsgBox intsum End Sub

    intNumber در اين مثال در واقع CounterVar در قالب حلقه است.StartVal مي تواند يك عدد يك عبارت و يا يك متغير باشد.10 به جاي آن نشسته است.EndVal هم مي تواند يك عدد يا يك عبارت باشد .در اينجا خبري از Step نيست .در قالب حكم For استفاده از Step اختياري است كه اگر مقدار آنرا مشخص نكنيد ويژوال بيسيك مقدار 1 را براي آن برمي گزيند.بنابراين هر دو حكم For زير كار يكساني انجام مي دهند.
    For intNumber= 1 To 10
    For intNumber=1 To 10 Step 1

    مجددا به مثال بر مي گرديم.در ابتداي برنامه مقدار intsum برابر 0 قرار مي گيرد تا كاملا جمع مقادير مقدار اوليه اي نداشته باشد.حلقه با حكم For آغاز مي گردد و در ابتدا مقدار IntNumber برابر 1 قرار مي گيردو اين مقدار در بدنه حلقه با مقدار intsum كه صفر است جمع مي شود و با رسيدن به حكم Next چون هنوز شرط حلقه به پايان نرسيده است (حلقه بايد به مقدار intNumber تا 10 يكي يكي اضافه كند).بنابراين دوباره به ابتداي حلقه بر مي گردد و اين بار مقدار intnumber را برابر 2 قرار مي دهد و اين مقدار را با intsum كه الان 1 است جمع مي كند و عدد 3 را مجددا در intsum قرار مي دهد.حلقه تا زماني كه مقدار intNumber به 10 برسد به همين روال ادامه مي دهد و پس از رسيدن به 10 و جمع بست مقدار نهائي و قرار دادن ان در intsum ازحلقه خارج گشته و به وسيله يك دستور پياميMsgBox مقدار نهائي intsum را به كاربر نمايش ميدهد.

    شايد اين سوال پيش بيايد كه به راحتي با يك خط دستور به شكل زير مي توان به جواب رسيد و نيازي به اين همه كد نويسي و استفاده از حلقه نيست:
    intsum=1+2+3+4+5+6+7+8+9+10
    اما اگر تعداد اعداي كه خواستيم مجموع آنها را حساب كنيم 1000 بود به چه شكل مي توانستيم تمام اعداد را بنويسيم پس مي بينيم كه استفاده از حلقه For كار را آسان مي كند.

    اگر براي Step مقدار منفي در نظر بگيريد حلقه زير پنج بار صداي بوق بلند گوي كامپيوتر شما را در ميآورد:

    کد:
    کد:

    For intCtr = 5 To 1 Step -1 Beep Next
    نكته: دستور Beep سبب بوق زدن بلند گوي كامپيوتر مي شود.

    نكته مهم : شما به راحتي مي توانيد با دستور Exit For از حلقه For خارج شويد.

    در اين رابطه به كد زير دقت كنيد:
    کد:
    کد:

    For i = 1 To 10 If i < 5 Then Exit For End If Next
    در اين مثال به محض اينكه مقدار i از 5 كوچكتر شود از حلقه خارج مي شود.
    به ترتيب استفاده از حلقه For، If ،End IF و Next دقت كنيد.
     
  6. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    رويدادها در ويژوال بيسيک 1

    براي هر عملي که ميخواهيم کاربر در برنامه ما انجام دهد مي بايست در هر رويداد کد خاصي را بنويسيم تا نسبت به رفتار خاصي پاسخگو باشيم اين رويدادها تعيين ميکنند که برنامه ما نسبت به چه اعمالي حساس باشد کليک کردن يا فشردن دکمه اي خاص.

    عمل کليک : در مثالهاي قبلي وقتي روي دكمه کليک ميکرديم عملي انجام ميشد .در واقع كدي خاص را به روال كليك دكمه اختصاص مي داديم و انجام عملي خاص را انتظار داشتيم.
    حال مي خواهم به بعضي ديگر ازخصوصيات و رويدادهاي كنترلها نظير دكمه ها و برچسب ها و ...بپردازيم.

    رويداد MouseMove:
    اين رويداد زماني حادث مي شود كه ماوس شما روي كنترل حركت كند.به عنوان مثال يك دكمه روي فرم قرار دهيد و كد زير را در روال MouseMove بنويسيد:

    کد:
    کد:

    Private Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Command1.Caption = "Mouse Move !" End Sub
    رويدادهاي MouseUp, MouseDown:
    هنگامي كه روي كنترلي كليك مي كنيم فشردن ماوس رويداد MouseDown و رها كردن كليك ماوس رويداد MouseUp را در پي دارد.بنابراين دقت كنيد كه چهاررويداد متفاوت تنها مي توان به ماوس در مواجهه با كنترل ها نسبت داد.
    عمل click
    عمل MoouseMove
    عمل MouseDown
    و عمل MouseUp
    به رويداد هاي فوق مي توان dblclick را نيز كه مختص بعضي از كنترلها كنترل برچسب است را نيز اضافه كرد درواقع رويدادي است كه در پي عمل دبل كليك روي كنترل اتفاق مي افتد.
    به مثال زير توجه كنيد تا با رويدادهاي ماوس بيشتر آشنا شويد:
    يك برچسب روي فرم قرار دهيد و كدهاي زير را به رويدادهاي مورد نظر نسبت دهيد:

    کد:
    کد:

    Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.ForeColor = &H80000007 Label1.FontBold = False End Sub Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.ForeColor = vbRed Label1.FontBold = True End Sub Private Sub Label1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1.ForeColor = vbBlue Label1.FontBold = True End Sub ​


    همانطور كه ملاحظه مي فرمائيد اين رويداد ها فقط مختص كنترلها نيستند بلكه شامل رويدادهاي مربوط به فرم هم مي شوند.
    با اجراي اين برنامه به محض كليك روي برچسب رنگ فونت برچسب قرمز شده و فونت آن نيز bold مي شود و با رها كردن آن رنگ فونت آبي مي شود و با حركت روي فرم به حالت عادي برمي گردد.

     
  7. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    رويدادها در ويژوال بيسيك 2

    در مبحث گذشته با رويدادهاي ماوس تا حدودي آشنا شديد.امروز تصميم دارم به تعدادي از رويدادهاي فرم بپردازم.
    بگذاريد ببينيم هنگامي كه يك برنامه را اجرا مي كنيد چه اتفاقاتي ميافتد.كدهاي زير را در روالهاي مختلف فرم همانند من بنويسيد:

    کد:
    کد:

    Private Sub Form_Activate() MsgBox "this is Form_Activate" End Sub Private Sub Form_Initialize() MsgBox "this is Form_Initialize" End Sub Private Sub Form_Load() MsgBox "this is Form_load" End Sub Private Sub Form_Paint() MsgBox "this is Form_Paint" End Sub Private Sub Form_Resize() MsgBox "this is Form_Resize" End Sub Private Sub Form_Terminate() MsgBox "this is Form_Terminate" End Sub Private Sub Form_Unload(Cancel As Integer) MsgBox "this is Form_Unload" End Sub ​

    خوب اگر برنامه را اجرا كنيد اولين پيغامي كه مشاهده مي كنيد چيست؟
    بله Form_Initialize و سپس هم Form_load
    اگر دقت كرده باشيد تا اينجاي كار فرمي ظاهر نشده است .يعني اين دو رويداد ابتدائي ترين رويدادي هستند كه در هنگام اجراي يك برنامه ويژوال بيسيك اتفاق مي افتند.بنابراين شما مي توانيد داده هاي اوليه مقاديري كه در برنامه استفاده مي كنيد اعم از رنگ فرم ، كپشن فرم ، بار گذاري تايمر (بعدا راجع به تايمر بحث مي كنم) ، دادن مقادير ثابت و ...از اين دو رويداد استفاده كنيد.
    بعد از اين دو رويداد خواهيد ديد كه به ترتيب رويدادهاي Form_Resize و Form_Activate (تقريبا هم زمان) و Form_Paint اتفاق مي افتند.
    در حالتهاي فوق خواهيد ديد كه فرم به نمايش در آمده است.
    حال سعي كنيد با زدن دكمه بستن فرم برنامه را به پايان برسانيد.
    بله درست است ابتدا رويداد Form_Unload و سپس Form_Terminate اتفاق مي افتد.

    اين ديگر تشخيص و تبحر برنامه نويس است كه بسته به انتظاري كه از برنامه و ايده اي كه دارد بداند كه كدهاي مورد نظر را در چه رويدادي بايد بنويسد​
     
  8. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    آرايه هاي داده ها

    تاكنون با مفهوم متغير ها و خصوصيات مختلف آنها و فرمتهاي خاصشان آشنا شديد.شما آموختيد كه چگونه از متغيرها درون برنامه هاي خود استفاده كنيد و بسته به نوع محاسبات و شيوه ذخيره سازي و ارتباط با كاربر از انواع متغيرها استفاده كنيد.
    اما اگر بخواهيد با گروهي از متغيرها كار كنيد مجبور هستيد هر متغير را جداگانه نام ببريد.آرايه ها به شما كمك مي كنند كه تنها تحت يك نام متغيرهاي مختلفي را ذخيره كنيد.
    برخلاف آرايه ها متغير هاي غير آرايه اي داراي اسامي مجزائي نظير آنچه قبلا آموختيد هستند اما متغير هاي آرايه اي همگي داراي اسم يكساني با اندكي تغيير مي باشند.درواقع آرايه هاي داراي نام يكسان ولي انديس متفاوت هستند.انديس مانند يك مقدار شاخص عمل مي نمايد.به عنوان مثال اولين مقدار درون يك آرايه مي تواند به صورت (FirstArray(0 مشخص گردد.(انديس ها از صفر شروع مي شوند، مگر اينكه با استفاده از حكم option Base 1 در پيمانه General انديس آرايه ها را از يك آغاز نمائيد.شكل زير نشان مي دهد كه به عنوان مثال متغير Test كه از نوع آرايه اي است چگونه در حافظه قرار مي گيرد.

    [​IMG]


    اجازه دهيد با ذكر يك مثال به تفاوت متغيرهاي آرايه اي با غير آرايه اي پي ببريم.فرض كنيد شما داراي فروشگاههاي متعددي در سطح كشور هستيد و مايليد كه در برنامه خود مجموع سود آنها را محاسبه نمائيد.اگر از متغير هاي آرايه اي استفاده نكنيد ناچاريد به هر فروشگاه يك نام اختصاص دهيد.بنابراين براي جمع سودهاي 10 فروشگاه خود بايد بنويسيد:

    کد:
    کد:

    CurTotal = CurDivSeles0 + CurDivSeles1 + CurDivSeles2 + _ CurDivSeles3 + CurDivSeles4 + CurDivSeles5 + CurDivSeles6 + _ CurDivSeles7 + CurDivSeles8 + CurDivSeles9 ​

    اما در هنگام استفاده از آرايه به ساده ترين شكل ممكن روي متغير ها حر كت كرده و آنها را جمع ميكنيدهمانند كد زير:

    کد:
    کد:

    Dim CurDivSeles(10) As Currency CurTotal = 0 For intCtr = 0 To 9 CurTotal = CurTotal + CurDivSeles(intCtr) Next intCtr ​

    همانطور كه ملاحظه مي كنيد در ابتداي كد با حكم Dim متغير CurDivSeles را كه يك متغير 10 خانه اي است تعريف كرديم و سس با يك حلقه For ساده تمام اين متغير هاي مربوط به يك آرايه را جمع كرديم.
    شايد در اين دو مثال تفاوت فاحشي در كد نويسي مشاهده نكنيد اما اگر به جاي 10 فروشگاه 100 و يا 1000 فروشگاه داشتيد چطور؟
    فرض كنيد لازم است به تعداد نام هاي افراد دانش آموز در يك دبيرستان نام آنها را سوال كنيد و در يك متغير ذخيره كنيد.بهترين روش استفاده از آرايه همانند كد زير است:

    کد:
    کد:

    Dim strName(100) As String For intCtr = 0 To 100 strName(intCtr) = InputBox("What is the next childs names?") Next intCtr ​

    همچنين شما مي توانيد از آرايه هاي بيش از يك بعد هم استفاده كنيد.در مباحث بعدي به بحث جالبي از ارايه ها به نام آرايه هاي كنترل خواهم پرداخت.
     
  9. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    آرايه هاي كنترل

    در مباحث گذشته چگونگي افزودن كنترلهاي مختلف به فرمتان را آموختيد.در درس گذشته هم با مفهوم آرايه ها آشنا شديد.در اين درس به بحث آرايه هاي كنترل پرداخته خواهد شد.
    در بحث آرايه فرا گرفتيد كه براي دسترسي راحت تر و كوتاه شدن برنامه از آرايه استفاده مي شود .
    يك آرايه مجموعه اي فضاهائي است كه تحت يك نام در كنار هم قرار دارند و با يك نام و انديسهاي متفاوت اين خانه ها فراخواني مي شوند.
    فرض كنيد مي خواهيد كه يك برنامه ماشين حساب ساده بنويسيد.بنابراين نياز داريد كه به جاي اعداد از 0 تا 9 از دكمه استفاده كنيد.همچنين دكمه هائي براي چهار عمل اصلي نياز داريد.
    اگر تمام دكمه ها را با روشهائي كه قبلا گفته شد در فرمتان قرار دهيد.براي فشردن هر كدام از اعداد و نوشته ها بايد يك كد بنويسيد.به اين ترتيب كه مثلا اگر دكمه 4 فشرده شد در خروجي عدد 4 نقش بندد.بنابراين خواهيد ديد كه به ازاي هر دكمه اي شما نيازمند نوشتن يك قطعه كد مشابه خواهيد بود.براي نقش بستن اعداد در خروجي ماشين حساب بايد مقدار هر دكمه اي كه فشرده مي شود به بقيه اعداد نوشته شده در خروجي اضافه شود.مثلا اگر خواستيد عدد 45 در خروجي ظاهر شود ابتدا عدد 4 فشرده شده و با متغير درون TextBox (خروجي) and شود(با استفاده از علامت & دو رشته به هم متصل مي شود )(البته اين يكي از روشهاي توليد عدد در ماشين حساب است و روشهاي ديگري نيز وجود دارد) وسپس عدد 5 هم به همين شكل بنابراين براي ورود داده به ماشين حساب كد زير براي تمامي دكمه هاي معرف عدد داده شود.ابتدا تعداد 10 دكمه و يك textbox روي فرم قرار دهيد خاصيت Caption دكمه ها را به ترتيب از 0 تا 9 قرار داده و خاصيت text كادر متني را مقدار خالي قرار دهيد.

    کد:
    کد:

    Private Sub Command1_Click() Text1.Text = Text1.Text & "0" End Sub Private Sub Command10_Click() Text1.Text = Text1.Text & "9" End Sub Private Sub Command2_Click() Text1.Text = Text1.Text & "1" End Sub Private Sub Command3_Click() Text1.Text = Text1.Text & "2" End Sub Private Sub Command4_Click() Text1.Text = Text1.Text & "3" End Sub Private Sub Command5_Click() Text1.Text = Text1.Text & "4" End Sub Private Sub Command6_Click() Text1.Text = Text1.Text & "5" End Sub Private Sub Command7_Click() Text1.Text = Text1.Text & "6" End Sub Private Sub Command8_Click() Text1.Text = Text1.Text & "7" End Sub Private Sub Command9_Click() Text1.Text = Text1.Text & "8" End Sub

    ديديد كه براي دكمه هائي با كارائي مشابه كه در كدينگ خود اختلاف بسيار كمي دارند بايد اين همه كد بنويسيد.
    حال اگر قرار باشد بازي مار و پله را با 100 خانه بنويسيد كه واويلا !!!!!!!!!
    اما راه حل چيست؟ راه حل بسيار ساده است بله استفاده از آرايه كنترل.آرايه كنترل مجموعه اي از كنترلهاي همنوع است كه تحت يك نام اما با انديسهاي متفاوت شناخته مي شوند.تمامي دكمه هاي مثالتان را پاك كنيد و تنها command1 را نگه داريد.روي اين دكمه كليك راست كنيد و گزينه Copy را برگزينيد و در جاي ديگري از فرمتان كليك راست كنيد و از گزينه ها Paste را برگزينيد.خواهيد ديد كه پيغام زير ظاهر مي شود:

    [​IMG]


    اين پيغام به شما مي گويد كه دكمه اي با همين نام روي فرم شما وجود دارد آيا مايل هستيد تا يك آرايه با همين نام ايجاد كنيد؟ اگر No را برگزينيد دكمه ديگري با نام command2 ساخته مي شود همانند آن چيزي كه قبلا آموختيد ولي اگر گزينه Yes را انتخاب كنيد دكمه اي ساخته مي شود با نام Command1(1)x و دكمه قبلي به نام (Command1(0 تغيير نام مي دهد.به همين ترتيب كه گفته شد تعداد مجموعا 10 دكمه را به فرمتان بيافزائيد (با نام command 1 و انديسهاي از 0 تا 9). روي هر كدام از اين دكمه ها كليك كنيد به روال كليك دكمه برده مي شويد منتها با يك تفاوت و آن اين است كه تمام دكمه ها به نام Command1 شناخته مي شوند به انديسهاي مختلف . پرانتزي نسبت به حالت هاي قبل به روال كليك اضافه شده است كه معرف ايندكس يا همان انديس كنترل است:
    Private Sub Command1_Click(Index As Integer)

    End Sub

    حال كد زير را درون روال اضافه كنيد:

    کد:
    کد:

    Private Sub Command1_Click(Index As Integer) Text1.Text = Text1.Text & Index End Sub

    بله خواهيد ديد كه با فشردن هر دكمه عدد روي آن دكمه به كادر متني شما اضافه خواهد شد و نياز به آن همه كد هاي تكراري نيست.
    همانطور كه قبلا گفتم اينجا با 10 دكمه سرو كار داشتيم حال اگر با 100 برچسب يا تعداد بيشتري از هر كنترل سرو كار داشته باشيم بايد چه كار كرد.
    استفاده از آرايه هاي كنترل براي كنترلهائي كه با هدف واحدي در كنار هم قرار مي گيرند و يا در كدهاي خود تغييرات كمي نسبت به يكديگر دارند بسيار سودمند است.
    در مباحث بعدي به معرفي ساير كنترلهاي ويژوال بيسك خواهيم پرداخت​
     
  10. کاربر پیشرفته

    تاریخ عضویت:
    ‏9/12/10
    ارسال ها:
    19,795
    تشکر شده:
    6,456
    امتیاز دستاورد:
    113
    پاسخ : آموزش مقدماتي و جامع ويژوال بيسيك 6 Visual Basic

    كادرهاي ليستي

    كاربران اغلب لازم داند كه كه موردي را از يك ليست انتخاب كنند و يا چيزي را به اقلام ليستي اضافه نمايند.ويژوال بيسيك دو نوع كنترل كادر ليستي و كادر كومبو را براي اين منظور فراهم مي آوردكه مي توانيد با استفاده از آنها ليستي را نمايش دهيد.كنترل كادرهاي ليستي و آرايه ها رامي توانيد در هم ادغام كنيد تا در هنگام پردازش ليست هاي اطلاعات كاملا هماهنگ با هم عمل كنند.
    شما در هنگام كار با ويندوز و برنامه هاي جانبي ديگري كه در ويندوز با آنها كار كرديد به اين كادر ها برخورد كرده ايد..كنترل كادر ليستي و يا همان ListBox به كاربر امكان انتخاب كردن از ميان چندين مورد را مي دهد.كاربر به جاي تايپ كردن مقداري درون درون يك كادر متني گزينه اي را انتخاي مي كند.
    هر كادر ليستي مي تواند حاوي يك يا چند ستون باشد.براي آشنائي بيشتر با مشخصات كنترل كادر ليستي بهتر است يك ListBox به فرم اضافه كنيد و نظري به مشخصات آن در لايه Properties بيافكنيد.در پايين به برخي از اين خصوصيات اشاره مي كنم:
    BackColor: رنگ زمينه كادر ليستي را مشخص مي سازد.
    Columns: تعداد ستونها را تعيين مي كند.اگر صفر باشد كادر ليستي به صورت عمودي بر روي يك ستون پيمايش مي شود.اگر 1 را بيشتر باشد اقلام كادر ليستي در تعداد ستون مشخص شده نمايش مي يابد و نوار پيمايش افقي پديدار مي گردد.
    ForeColor: رنگ متن را مشخص مي سازد.
    List: مقاديري را كه مي توانيد در زمان اجرا درون كادر ليستي وارد كنيد در يك كادر ليستي با خصوصيات پائين افتادني نگه مي دارد.در هر زمان مي توانيد موردي را در ليست وارد كنيد.(بعضي وقتها لازم است در هنگام شروع برنامه كادر ليستي شما با مقادير ثابتي پر شود در اين هنگام از اين خاصيت استفاده مي كنيد.)
    MultiSelect: وضعيت قواعد انتخابي كادر ليستي است.اگر صفر باشد كاربر فقط مي تواند يك گزينه را از ليست بر گزيند.اگر 1 باشد كاربر مي تواند بيش از يك مورد را با كليك ماوس انتخاب نمايد.اگر 2 باشد كاربر مي تواند چندين مورد را با استفاده از كليك + sheeft انتخاب نمائيد.
    Sorted: تعيين مي كند كه مقادير ليستي به طور خودكار مرتب شوند و يا خير.

    مشخصات ديگري نيز هم وجود دارد كه قبلا در كنترل هاي ديگر به آنه پرداختيم.
    اما روشهاي موجود براي كنترل كادر ليستي روالهائي هستند كه يك كنترل مي داند كه چگونه آنها را اجرا كند.روشهاي متداول در كادر هاي ليستي همانند زير است. براي دستيابي به اين متدها كافي است نام listbox ي را كه در فرم قرار دهيد را در هر كدام از روالهائي كه قبلا آموختيد بنويسيد و علامت "." بگذاريد تا به آنها دستيابي داشته باشيد)
    AddItem : گزينه اي را به كادر ليستي اضافه مي كند.
    Clear : تمامي اقلام را از كادر ليستي حذف مي كند.
    List : آرايه اي رشته اي كه اقلام درون كادر ليست را نگه مي دارد.
    ListCount : تعداد كل اقلام درون كادر ليستي .
    RemoveItem : موردي را از كادر ليستي حذف مي كند.

    متداولترين روش در هنگام اضافه كردن اقلام به listbox استفاده از AddItem است.فرض كنيد مي خواهيد تعداد روزهاي يك ماه 30 روزه را درليست نمايش دهيد.براي اين منظور با استفاده از يك حلقه For ليست را پر مي كنيد.دقت كنيد كه برخورد ويژوال بيسيك با مقادير ليست همانند آرايه هاي از رشته هاست.(لازم است مفهوم آرايه ها را به درستي بدانيد)
    به كد زير دقت كنيد:
    کد:
    کد:

    Private Sub Form_Load() For i = 1 To 30 List1.AddItem i Next End Sub ​

    با اجرا شدن اين كد شكل زير نمايش خواهد يافت.مي بينيد كه اعداد 1 تا 30 در يك ليست نمايش داده شده اند كه قابل انتخاب است.


    [​IMG]
    هر مورد در كادر ليستي حاوي يك انديس مرتبط است.انديس ،عددي است كه براي اولين گزينه درون كادر ليستي برابر 0، براي دومين برابر 1و الي آخر است.
    بنابراين اگر خواستيد مقدار عدد 10 را در مثال بالا حذف كنيد كافي است بنويسيد:
    (List1.RemoveItem (9
    از متدهاي ديگر كادر ليستي ListIndex است كه به خانهاي از ليست شما اشاره دارد.
    از Selected براي فهميدن اينكه كاربر موردي از كادر ليستي را انتخاب كرده يا خير استفاده مي شود.

    كادر هاي كومبو

    كادر هاي كومبو دقيقا شبيه كادر ليستي است با اين تفاوت كه كاربر در زمان اجرا مي تواند اقلامي را به كادر كومبو اضافه كند در حالي كه در زمان اجرا تنها مي تواند بر روي اقلام يك كادر ليستي پيمايش كند و آنها را انتخاب كند.