تاریخچه زبان VB
از امروز قصد دارم آموزش آموزش برنامه نویسی به زبان ویژوال بیسیک و در آینده نزدیک با آموزش ویژوال بیسیک دات نت برای شروع آموزش برنامه نویسی بهتره از زبان بیسیک شروع کنید و با مفاهیم برنامه نویسی در حالت کلی آشنا تر بشوید
در 3 یا 4 پست آینده با آموزش الگوریتم نویسی و نوشتن برنامه های محاسباتی در محیط ساده و بی آلایش بیسیک خواهم پرداخت اجازه بدین ابتدا با تاریخچه زبان بیسیک بیشتر آشنا بشیم و آموزش الگوریتم نویسی و برنامه نویسی رو به پست های آینده موکول کنیم
تاریخچه زبان بیسیک:
ویژوال بیسیک تاریخچه جالبی دارد .با گرافیکی شدن سیستم عامل ها (ویندوز) برنامه نویسی برای برنامه نویسان بسی مشکل تر شد زیرا برنامه نویس علاوه بر نوشتن برنامه می بایست برای برنامه محیط گرافیکی نیز ایجاد می کرد البته نه به روش امروزی که این کار به سادگی هرچه تمام تر انجام می پذیرد در آن زمان برای ایجاد فرم برنامه برنامه نویس با زبان C مجبور بود صدها سطر کد بنویسد تا یک فرم ساده ایجاد شود
این ویژوال بیسیک بود که همه چیز را عوض کرد حتی نیازی نبود که برای ایجاد فرم کدی بنویسید اولین پنجره را ویژوال بیسیک برایتان می ساخت برای ایجاد هر کنترلی دیگری نیز برنامه نویسی سختی ای را متحمل نمی شد و با کشیدن و رها کردن می توانست چندین کنترل را روی فرم ایجاد کند
ویژوال بیسیک از دوعبارت Basic که نشان می دهد این زبان براساس زبان Basic ساخته شده است و کلمه Visual به معنی بصری است و نشان دهنده این است که برنامه هایی که توسط این زبان نوشته می شوند جنبه بصری دارند و دارای عناصر گرافیکی هستند ساید تصور شود که ویژوال بییسیک زبانی ساده است اما به جرات می توان گفت که <یزوال بیسیک هرچیزی است به جز ساده ویژوال بیسیک برای ویندوز امکان ساخت کنترل های سفارشی را فراهم آورد در زیر نگاهی به نسخه های گوناگون ویژوال بیسیک می اندازیم :
ابتدا ویژوال بیسیک در سال 1991 توسط غول نرم افزاری دنیا یعنی مایکوسافت وارد بازار شد
در ویژوال بیسیک 3 امکان کار با بانک اطلاعاتی به وی بی (Visual Basic) اضافه شد
در ویژوال بیسیک 4 امکان کامپایل(ترجمه) کردن برنامه برای سیستم عامل های 16 و 32 بیتی فراهم آمد و امکان نوشتن COM و DLL به وی بی اضافه گشت
در نسخه 5 ویژوال بیسیک امکان ساختن ActiveX Control (کنترل های سفارشی) فراهم آمد
در نسخه 6 ویژوال بیسیک که در آن کل برنامه از نو نوشته شده بود کامپایل مفسری به سرعت اجرای برنامه ها کمک بسزایی کرد همچنین در این نسخه امکان ساخت کنترل های وب نیز فراهم آمد
در سال 2001 بزرگترین پیشرفت ویژوال بیسیک با ورود به دنیای دات نت فراهم شد و ویژوال بیسیک ثابت کرد برای برنامه های تحت وب هم گزینه ای بی نقص است
هر برنامه ای که می خواهید بنویسید ویژوال بیسیک دات نت بهترین گزینه است زبانی که روزی افرادی آن را برای سرگرمی جالب می دانستند آرام آرام بزرگ شد و امروز یکی از متداول ترین و پر طرفدارترین زبانهای برنامه نویسی به شمار می آید
مقدمه
visual Basic (که ازین پس آن را VB خواهیم خواند) از زبانهای برنامه نویسی تحت Windows می باشد که برای کدنویسی از دستورات زبان Basic سود می برد.
VB (مانند تمام زبانهای برنامه نویسی تحت ویندوز) با استفاده از تمام امکانات زیبای ویندوز (که باعث فراگیرشدن این سیستم عامل زیبا و توانمند در میان کاربران شده است)، طراحی محیطی زیبا و قدرتمند را برای پروژه مورد نظر، بسیار ساده می نماید.
در حال حاضر، به جرأت می توان گفت که یکی از انتخاب های اصلی برنامه نویسان حرفه ای در سطح جهان برای تهیه پروژه های با قابلیت های ویژه، VB می باشد، خصوصاً از VB6 که مایکروسافت عملاً با افزودن توانایی های متنوع بسیار به VB، حتی حاضر شد از دیگر زبانهای معروف تحت ویندوز خود مانند Visual C++ و Visual Foxpro بگذرد و سعی در هدایت تمام برنامه نویسان به سوی VB داشته باشد.
در حال حاضر که به تهیه این جزوه همت گماردم، نسخه آزمایشی VB.net در بازار وجود دارد ولی عموماً برنامه نویسان ازVB6 استفاده می کنند و لذا ما نیز این نسخه ازVB را برای آموزش انتخاب می کنیم، هر چند تمام خوانندگان عزیز می دانند که عموماً با فراگیری یک نسخه از یک برنامه، فراگیری نسخه های بعدی آن کار چندان دشواری نخواهد بود.
خوانندگان عزیز توجه داشته باشید که برای فراگیری VB، آشنایی با ویندوز و Basic لازم است. همچنین بهتر است در هنگام مطالعه، VB باز باشد و مطالب را در همان لحظه کار کنید
مفاهیم بنیادی
درVB، شئ (Object) های بسیاری وجود دارد مانند فرمها، دکمه ها، برچسب ها، تصاویر و ... . همانطور که می دانیم هر شئ(Object) دارای یک سری مشخصات(Properties) می باشد. به عنوان مثال اگر یک اتومبیل را به عنوان یک شئ در نظر بگیریم، این اتومبیل دارای مشخصاتی چون رنگ خاص، وزن خاص، طول و عرض و ارتفاع خاص، میزان خاص مصرف بنزین و ... می باشد که در تمایز دو اتومبیل از هم، همین مشخصات هستند که به ما کمک می کنند.
درVB نیز هر Object دارای یک تعداد مشخصه (Property) می باشد. به عنوان مثال یک دکمه(Button) دارای مشخصاتی چون عرض(Width) و ارتفاع(Height) خاص و یا یک عنوان(Caption) خاص و ... می باشد.
برخی شئ(object) ها درVB، فقط در کدنویسی قابل دسترسی هستند(مانند شئADODB که در آینده با آن آشنا خواهید شد) اما برخی دیگر علاوه بر زمان کدنویسی، در زمان طراحی (Design) نیز می توان آنها را بر روی فرمها و در جای دلخواه قرار داد و آنها را تنظیم (Set) نمود. به اشیاء نوع اخیر، کنترل (Control) گفته می شود.
کنترل ها خود دو گونه اند، برخی علاوه بر زمان طراحی (Design) در زمان اجرا (Run Time) نیز دیده می شوند، به این نوع کنترل در اصطلاح(Visual Control) VCL گفته می شود که بیشترین انواع کنترلها را در بر می گیرند (مانند دکمه ها، جدولها، برچسبها و بسیاری دیگر که در ادامه خواهند آمد) اما برخی دیگر از کنترل ها فقط در هنگام طراحی (Design) دیده می شوند و در هنگام اجرا تنها عمل خاصی انجام می دهند و خود دیده نمی شوند (مانند کنترلTimer)، به این نوع کنترلها،Non-Visual Control گفته می شود. باید توجه داشته باشیدکه کنترلهایNon-Visual، ذاتاً درRun Time دیده نمی شوند ولی ممکن است بنابر نیازی و در زمانی خاص از اجرا، خودمان برای یک یا چند VCL نیز مقدار مشخصه Visual آنها را برابرFalse قرار دهیم که مسلماً در این حالت با وجود اینکه در آن زمان، این کنترلها دیده نمی شوند ولی VCL بودن آنها تغییری نکرده است.
کنترل ها (اعم ازVCL ها و غیر آن) معمولاً دارای تعدادی Event می باشند. Event ، رویداد یا رخدادی است که توسط کاربر و معمولاً با استفاده از ماوس یا صفحه کلید برای یک کنترل خاص روی می دهد.مثلاً یک کنترل ممکن است دارای رویداد (Event) Click باشدکه این نوع رویداد زمانی که کاربر در هنگام اجرای برنامه (Run Time) بر روی آن کنترل خاص کلیک نماید رخ می دهد.برخی Event های معمول دیگر برای کنترلها عبارتند از: DoubleClick (زمانی که بر روی آن کنترل دابل کلیک شود) ، MouseMove (زمانی که نشانگر ماوس بر روی آن کنترل قرار دارد) ، KeyPress (زمانی که کلیدی از صفحه کلید زده شد) ، KeyDown (زمانی که کلیدی از صفحه کلید پایین بود) ، KeyUp (زمانی که کلید زده شده برداشته شد) ، MouseDown ، MouseUp و ... که در ادامه با آنها بیشتر آشنا خواهیم شد.
برای هر Event (رویداد) می توان یک Event Procedure داشت. Event Procedure پاسخی است که یک کنترل زمانی که یک Event رخ می دهد، از خود نشان می دهد. در واقع Event قطعه برنامه ای است که زمانی که بر روی یک کنترل، یک Event رخ می دهد، به طور اتوماتیک اجرا می شود.
کنترلها معمولاً علاوه بر یک سری مشخصات (Properties) و یک سری رویداد (Event) ، دارای تعدادی نیز متد (Method) می باشد. متدها عملیاتهای تعریف شده ای هستند که توسط آنها یک عمل خاص بر روی کنترلها انجام می شود.
توجه داریم که تفاوت متدها و Event Procedure ها در این است که متدها توسط VB ، شناخته شده اند و عملشان همیشه ثابت است، اما Event Procedure ها توسط برنامه نویس و به دلخواه او تهیه می شود، بنابراین Method های مشابه بر روی کنترلهای متفاوت، پاسخ مشابهی دارد ولی ممکن است Event های مشابه بر روی کنترلهای متفاوت با توجه به Event Procedure های مخصوص هر یک، متفاوت باشد (مثلاً رویداد Click برای یک کنترل، کاری انجام دهد و برای کنترلی دیگر، کاری دیگر).
نکته دیگری که باید به آن توجه داشت اینست که Procedure ها به طور مستقیم اجرا نمی شوند بلکه فقط زمانی که نامشان فراخوانی شود اجرا می شوند. بنابراین مثلاً در مورد Event Procedure ها باید بدانیم که با اینکه کد مربوط به آنها نوشته شده است ولی تا وقتی که آن Event خاص (که باعث فرا خوانی Event Procedure مربوط می شود) روی ندهد، این کدها اجرا نخواهند شد
تعریف متغیر ها
به اطمینان، قبلاً در برنامه نویسی (لااقل در Basic که پیش فرض بحث ما معرفی شده بود) از متغیرها زیاد استفاده کرده اید. در برخی زبانهای برنامه نویسی (مثل Basic) ، نوع متغیرهای بکار رفته در برنامه، لازم نیست از قبل تعریف شده باشد و در هنگام اجرا، کامپایلر، خود، آن را به نوع مورد نیاز (مثل Integer برای برای داده های عددی صحیح، یا String برای نوع داده رشته ای و کاراکتری و ...) تعریف و اجرا خواهد کرد. اما در برخی دیگر (مانند زبان برنامه نویسی Pascal)لازم است، نوع داده متغیرهای بکار رفته، در جایی از برنامه (و عموماً قبل از استفاده از آن) تعریف شوند.
در VB، از آنجا که VB از Basic برای کدنویسی استفاده می شود، به طور معمول، نیاز به تعریف نوع داده ها نیست. اما از آنجا که امروزه برنامه نویسان ترجیح می دهند که از کامپایلری برای برنامه نویسی استفاده کنند که او را به تعریف تمام متغیرها مجبور کند (زیرا اگر چنین نباشد، اگر او به اشتباه دستوری را غلط تایپ کند (مثلاً بجای then بنویسد Then) ، کامپایلر آن را به عنوان متغیری فرض می کند و در واقع بدون اینکه ما خطایی را دریافت کنیم، در روند برنامه مان مشکل پیدا می شود و خطایی رخ می دهد که شاید تشخیص علت آن سخت تر شود) ، می توانیم VB را موظف سازیم تا ما را مجبور به تعریف نوع داده متغیرها نماید.
اگر در ابتدای هر یونیت (Unit) عبارت Option Explicit نوشته شود، VB ما را مظف می کند که در آن یونیت، هر متغیری که بخواهیم استفاده کنیم، آن را قبل از استفاده، تعریف نماییم (لذا بهتر است ابتدای همه Unitها عبارت مذکور باشد) . یونیت (Unit) ها، بخش هایی از برنامه اند که در آنها کدنویسی می شود. مثلاً هر فرم، دارای یک Unit مخصوص به خود است که تمام Event Procedureهایی که تا بحال می نوشتیم، در آن قرار می گرفت.
همچنین اگر از منوی Tools گزینه Options را اتنخاب کنیم، و از لبه Editror (Tab Sheet) ، گزینه Require Variable Declare را چک مارک بزنیم، از این پس، VB هر فرمی که ایجاد می شود، به طور پیش فرض عبارت Option Explicit را در ابتدای آن خواهد نوشت و در واقع همیشه ما را موظف می سازد که متغیرها را تعریف نماییم.
برای تعریف متغیرها از دستور Dim به شکل کلی زیر استفاده می شود:
Dim variableNames As variablsType
به عنوان مثال دستور Dim a,b As Integer متغیرهایی را به نام a,b از نوع داده Integer (نوع داده عددی صحیح) تعریف می کند و سپس از آن می توانیم متغیر a را در برنامه مقداردهی نماییم.
متغیرها را می توان در سه سطح تعریف نمود (Space of Variables) :
1- سطح پروسیجر (procedure Level) :
اگر متغیری در یک Procedure (و معمولاً ابتدای آن) تعریف کنیم، آن متغیر را فقط در همان Procedure می توان استفاده نمود و در واقع برای همان Procedure خاص تعریف شده است.
2- سصح فرم (Form Level) :در سطح فرم (یعنی در ابتدای Unit مربوط به فرم و پس از عبارت Option Explicit) ، متغیرها می توانند به دو نوع تعریف شوند:
2-1- تعریف به صورت Private (شخصی) :
اگر متغیری در سطح فرم به صورت Private و به شکل کلی:
Private variableNames As variableType
تعریف شود، آن متغیر فقط در تمام Procedureهای فرم قابل استفاده است و در فرم های دیگر قابل دسترسی و استفاده نمی باشد (مگر اینکه در آنها هم جداگانه تعریف شده باشد) .
2-2- تعریف به صورت Public (عمومی) :
اگر متغیری در سطح فرم، به صورت Public و به شکل کلی:
Public variableNames As variableType
تعریف شود، در این صورت آن متغیر علاوه بر دسترسی در همان فرم (بوسیله نام آن متغیر) ، در فرمهای دیگر (در واقع در کل پروژه) قابل دسترسی خواهد بود. فقط در صورت نیاز به استفاده در فرمهای دیگر لازم است نام فرمی را که متغیر در آن تعریف شده است ذکر شود (البته اگر آن فرم load باشد) و سپس پس از یک نقطه (Dot) نام آن متغیر آورده شود. به عنوان مثال اگر در ابتدای یونیت مربوط به Form1 نوشته شده باشد:
Public Number As Integer
و بخواهیم در فرمی دیگر، به آن مقداردهی کنیم، لازم است چنین بنویسیم:
Form1.Number = 15
توجه: اگر در سطح فرم از Dim برای تعریف استفاده شود، به طور پیش فرض آن را Private در نظر خواهد گرفت.
3- سطح ماژول (Module Level) :
ماژولها بخشی از پروژه هستند که متغیرها، توابع و Procedureهای عمومی (Global) را در آن تعریف می کنیم. اگر تعریفی (مثل تعریف نوع داده متغیر یا یک Procedure) با Private انجام گیرد، فقط در همان ماژول قابل استفاده می باشد و اگر با Public صورت گیرد، در هر فرمی و بدون نیاز به نوشتن نام ماژول در ابتدای آن، قابل استفاده خواهد بود. نکته ای که باید توجه داشت اینکه اگر بخواهیم از متغیریا Procedureای که در یک ماژول به صورت Public تعریف شده است، در ماژولی دیگر استفاذه کنیم، ذکر نام ماژول در ابتدای آن به همراه یک نقطه (Dot) ضروری است.
معمولاً از تعریف Public در ماژول زمانی استفاده می کنیم که بخواهیم متغیر یا Procedureای به صورت Global (عمومی) در سراسر پروژه استفاده شود. شاید بگویید می شود در هر فرمی که به آن نیاز داریم، همانجا متغیر را تعریف می کنیم، پس چه نیازی به ماژول داریم؟
هر چند این کار باعث می شود که برنامه خطای دستوری از ما نگیرد اما در اینصورت وقتی از فرمی به فرم دیگر می رویم مقدار موجود در آن متغیر، پس از تعریف مجدد، دوباره Null (تهی) می شود، در حالیکه اگر از یکبار تعریف Public در ماژول استفاده کنیم، پس از مقدار دهی در جایی از پروژه، تا مقداردهی مجدد، این مقدار در تمام پروژه قابل دسترسی است.
برای افزودن یک ماژول به پروژه کافی است از منوی Project گزینه Add Module را انتخاب کنید و آن را (با پسوند .BAS) save نماییم.
همانطور که ملاحظه می فرمایید، ماژولها تنها بخش کدنویسی (Unit) دارند بر خلاف فرمها که یک بخش Interface (ظاهری) داشتند که کنترلها را به صورت Visual روی آن قرار می دادیم و یک بخش کدنویسی (Unit) که کدهای مربوط به Event Procedureها را در آن می نوشتیم. همچنین ملاحظه می فرمایید که با توجه به وظیفه ماژولها، معمولاً در کل پروژه اولاً به یک ماژول نیازمندیم ثانیاً به بیش از یک ماژول احتیاجی پیدا نمی کنیم.
نکته: علاوه بر متغیرها می توانیم از ثوابت (Constants) نیز در پروژه استفاده کنیم. ثوابت، بخشی از پرونده اند که هنگام تعریف، مقداردهی می شوند و تا پایان پروژه مقدارشان ثابت می ماند. برای تعریف ثوابت از دستور Constant استفاده می شود به عنوان مثال:
Const PI As single = 3.14
آرایه ها
حتماً یکی از الفاظی که در برنامه نویسی، از آن بهره بسیاری برده اید، آرایه می باشد. آرایه ها معمولاً خانه هایی از حافظه اند که تحت یک نام واحد و با اندیس های متفاوت نامگذاری می شوند. در Basic هم آرایه ها (مانند سایر زبانهای برنامه نویسی) کاربرد فراوانی دارند که مثلاً توسط دستور Dim A (10, 10) As Integer یک آرایه دو بعدی (در واقع یک ماتریس) به نام A از نوع داده Integer تعریف می شود که سطر وستون آن دارای اندیس های 0 تا 10 می باشد و توسط مثلاً A (5, 8) به خانه سطر 5 و ستون 8 از آن دسترسی خواهیم یافت.
در VB نیز (از آنجا که VB از Basic برای کدنویسی استفاده می کند) ، آرایه ها، تعریف آنها و نحوه دسترسی به خانه های آن به طریق فوق می باشد. اما آنچه در اینجا متفاوت است اینکه در VB می توان از کنترلها نیز یک آرایه ساخت. مثلاً چند Command Button با یک نام خاص و با اندیسهای متفاوت ایجاد کرد تا بتوان کدهای واحدی را با تفاوت بسیار کم برای همه شان نوشت.
اگر از یک کنترل کپی کنیم (در حالی که فوکوس در Design Time به آن است، کلیدهای CTRL+C را فشار دهیم) و سپس آن را در همان فرم Paste نماییم (کلیدهای CTRL+V را فشاردهیم) ، پیغامی بر روی صفحه نمایش ظاهر میشود مبنی بر اینکه "یک کنترل دیگر با همین نام در فرم وجود دارد، آیا می خواهید آرایه ای از کنترل ایجاد کنید؟" که می توانید جواب No به آن بدهید. اما اگر به این پیغام دکمه Yes را پاسخ دهید، VB به طور خودکار نام هر دو را یکسان (و به نام کنترل کپی شده) در نظر می گیرد و Index کنترل اول را صفر و Index کنترل دوم را یک قرار می دهد (Index ، یکی از مشخصه (Property)های تمام کنترل ها می باشد).
می توان اینکار را دستی نیز انجام داد. یعنی دو کنترل (یا چند کنترل) خاص را یک نام واحد دهیم که در اینصورت VB پس از دادن یک پیغام مبنی بر همین موضوع، آن دو کنترل (یا چند کنترل) را به صورت آرایه کنترل تبدیل خواهد کرد و به هر یک Index خاصی را نسبت خواهد داد.
اگر آرایه کنترل ایجاد کنیم، هر رویداد (Event) ای که بر روی هریک از عناصر رخ دهد (مانند Click و غیره) ، روی تمام آرایه صورت می گیرد و مقدار Index مربوط به عضوی که رویداد بر روی آن صورت گرفته، به عنوان یکی از پارامترهای پروسیجر آن، باز می گردد. برنامه بعد را بنویسید تا با نحوه کار آرایه کنترلها آشنا شوید.
هنگامی که VB اجرا می شود، توسط پنجره ای (شکل1)، نوع پروژه ای که می خواهید طراحی کنید از شما خواسته می شود.
همان طور که ملاحظه می فرمایید، انواع مختلفی از پروژه ها در این پنجره وجود دارد که در ادامه به برخی از آنها خواهیم پرداخت، ولی فعلاً نوع استاندارد پروژه های VB یعنی نوع Standard EXE را انتخاب و آن را باز(Open) می کنیم. این نوع پروژه (که غالب پروژه ها را در بر می گیرد) برای تهیه برنامه های کاربردی(Applications) مورد استفاده قرار می گیرد.
پس از باز کردن پروژهStandard Exe ، پنجره اصلیVB (شکل 2 ) برای این نوع پروژه باز می شود:
این پنجره، علاوه بر آنچه عموماً در پنجره های ویندوز می بینیم (مانند Title Bar وMenu Bar)، شامل چند بخش بسیار مهم می باشد:
1- یک فرم(Form) خالی با عنوان (Caption)برابر Form1 وجود دارد. این همان فرمی است که بلافاصله پس از اجرا (Run) شدن برنامه، روی صفحه نمایش، قرار می گیرد (این پیش فرض قابل تغییر است).
2- نوار ابزار Standard Buttons که دکمه هایی با کاربرد معمولاً بیشتر را شامل می شود. تعدادی از این دکمه ها را در ویندوز می شناسید (مانند Copy, Paste, Undo, Redo, Open وSave) و برخی دیگر را در ادامه خواهیم دید.
3- پنجره ای سمت چپ تصویر دیده می شود. این پنجره شامل برخی از کاربردی ترین کنترلهای قابل دیدن (VCL) می باشد. در ادامه با VCLها آشنا خواهیم شد و از آنها بسیار بهره خواهیم برد. به این پنجره Tool Bar (جعبه ابزار) گفته می شود.
4- در سمت راست تصویر سه پنجره دیگر دیده می شود. در بالا، پنجره پروژه (Project)، سپس پنجره مشخصات(Properties) و در پایین، پنجرهForm Layout قرار دارد. پنجرهProject شامل نام تمام اجزای پروژه مانند فرمها، ماژولها(Moduls)،Activex ها و ... می باشد. مثلاً اگر در پروژه ای چند فرم وجود داشته باشد و بخواهیم به فرم دیگری برویم، کافی است نام آن را در این پنجره دابل کلیک نماییم. پنجره Properties، برخی از مشخصه(Property) های مربوط به VCL ای که انتخاب شده (Select) باشد را نمایش می دهد که می توان آنها را در هنگام طراحی(Design Time) تغییر داد (سایر مشخصه ها باید در هنگام اجرا(Run Time) تنظیم شوند.) در پنجرهForm Layout نیز می توان مکان قرار گیری Form هنگام اجرای برنامه(Run Time) بر روی صفحه نمایش را تعیین کرد (همچنین این کار را توسط کدنویسی نیز می توان انجام داد و عموماً همین روش هم توصیه می شود و لذا عموماً حتی می توان این پنجره را به کل بست).
در این بخش با شمای کلیVB آشنا شدیم، در ادامه درباره VCL ها و نحوه کدنویسی برای آنها مطالب مفیدی خواهیم آموخت.
طراحی یک ماشین حساب ساده
فرض کنید بخواهیم یک ماشین حساب ساده، مطابق آنچه در شکل 7 میبینید، طراحی کنیم:
یک Label به نام lblDisplay به عنوان نمایشگر ماشین حساب و با Caption برابر مقدار" 0" (زیرا مقدار اولیه ماشینحسابها صفر می باشد) در محل خود قرار می دهیم. همچنین یکCommandButtonبه نام cmdequal به عنوان دکمه مساوی" و با Caption برابر "= " نیز در محل مخصوص خود قرار می دهیم.
حال ده عدد Command Botton دیگر با Caption های به ترتیب برابر " 0" تا "9 " را در جای خود قرار می دهیم و سپس نام همه این ده دکمه را به نام cmdNumber تغییر می دهیم. در این صورت همانطور که گفته شد، VB این ده کنترل را به صورت آرایه کنترلی (Control Array) در نظر خواهد گرفت (به پیغام داده شده با همین مضمون جواب Yes دهید).
به همین ترتیب چهار CommandButton دیگر را با Captionهای "+ " و "- " و "* " و "/ " و با نام یکسان cmdOprator به عنوان دکمه های چهار عمل اصلی به صورت آرایه کنترلی در محل های خود قرار می دهیم.
حال کافی است در یونیت مربوط به این فرم، چنین کدنویسی کنیم (توجه داشته باشید که متغیرهای x و y و op در سطح فرم (Form Level) تعریف شده اند و لذا مقدار آن در تمام فرم قابل دسترسی خواهد بود) :
Option Explicit
Dim x,y As Integer
Dim op As String
Private Sub cmdNumber_Click (Index As Integer)
IF lblDisplay = “Ø” then lblDisplay = “”
lblDisplay = lblDisplay + cmdNumber(Index).Caption
End Sub
Private Sub cmdOprator_Click (Index As Integer)
x = Val(lblDisplay)
op = cmdOprator(Index).Caption
lblDisplay = “Ø”
End Sub
Private Sub cmdEqual_Click ( )
y = Val (lblDisplay)
Select Case op
Case “+”
lblDisplay = x + y
Case “-”
lblDisplay = x - y
Case “*”
lblDisplay = x * y
Case “/”
lblDisplay = x / y
End Select
End Sub
توجه دارید که:
1. در رویدادهایی که مربوط به آرایه های کنترلی (یعنی cmd Number و cmdoperator ) است، یک پارامتر به نام Index در آن وجود دارد که شماره Index (اندیس) کلیدی که فشرده شده را برمیگرداند. و لذا مثلاً cmdOprator(Index).Caption برابر "+" خواهد بود، اگر کلید + فشرده شود و برابر "- " خواهد بود، اگر کلید – زده شود و ...
2. مشخصه (Property) پیش فرض برای Labelها Caption است و لذا هر جا lblDisplay ذکر شده است، توسط VB مانند lblDisplay.Caption در نظر گرفته می شود.
3. توسط دستور Select Case، یک متغیر (که نام آن جلوی دستور Select Case نوشته می شود) با مقادیر مختلفی (که جلوی دستورات Case بعدی نوشته می شود) چک می شود که اگر برابر هر یک از این مقادیر بود، دستور پس از همان Case اجرا می شود.
خاموش کردن سیستم با VB
در ویژوال بیسیک یک دستور به نام Shell وجود داره که میتونه یک برنامه رو با دریافت کردن آدرس برنامه اجرا کنه (همانند Run) در ویندوز و یکی از بهترین کارهایی که این تابع می تونه انجام بده اجرای برنامه هایی که می توان با تایپ مستقیم در Run ویندوز اجرا کرد مانند Calc و Notepad و Regedit و Log Off و ... هستش
من تو این آموزش می خوام از این روش برای خاموش کردن کامپیوتر استفاده کنم البته باید متذکر بشم که راههای دیگری همچون توابع API ای مانند ShellExecute و ExitWindowsEx و... برای خاموش کردن کامپیوتر وجود داره که من راحتترین روش رو برای این کار آموزش می دم
برای شروع کار یه پروژه استاندارد ویندوز در ویژوال بیسیک باز کنین و سه دکمه فرمان (Command Button) روی فرم رسم کنید و مقدار Caption اونها رو به ترتیب با Log Off و Shut Down و Restart مقدار دهی کنید البته برای بهتر جلوه دادن برنامه می تونید از تصویر به جای دکمه استفاده کنید که در مثال این برنامه از تصویر استفاده کردم
یه کم در مورد دستور Shell توضیح می دم:
شکل کلی این دستور به شکل زیر است:
Shell (pathname,[Windows Style]) ‘Shell Type
همون طور که ملاحضه می فرمایید این تابع دارای دو آرگومان بسیار مهم هستش
Pathname:مسیر برنامه که نوشتن اون در این تابع الزامی است و از نوع رشته ای هستش و باید در داخل دو کوتیشن محصور بشه ، همون طور که قبلا گفته بودم می تونین از دستورات Run ویندوز به جای آدرس دهی کامل در برخی برنامه ها استفاده کنین
:Windows Style همون طور که از نامش پیداست نوع باز شدن پنجره برنامه رو معین می کنه که نوشتنش الزامی نیست و در صورت ننوشتن پنجره در حالت عادی باز می شه این آرگومان می تونه با یکی از ثابت های زیر مقدار دهی بشه
VbNormalFocus
VbMaximized
VbMinimized
VbHidden
برای خاموش کردن کامپیوتر می تونیم دستور زیر رو در Run ویندوز تایپ کنیم
Shutdown –s –f –t 0
اگه در دستور بالا به جای –s از –r استفاده کنیم سیستم ریستارت می شه و اگه از –L استفاده کنیم سیستم Log Off می شه تقریبا همه چی تموم شده می تونین برای خاموش کردن کامپیوتر از دستور
Shell(“shutdown –s –f –t 0”) ‘Turn Off Windows
و از دستور
Shell(“shutdown –r –f –t 0”) ‘Reboot Windows
برای ریستارت کامپیوتر و همچنین از دستور
Shell(“shutdown –l –f –t 0”) ‘Log off Windows
برای Log Off کردن کامپیوتر می توانید استفاده کنید
کد کامل:
Private sub Cmdlogoff_Click()
Shell(“shutdown –l –f –t 0”,vbHidden) ‘Log Off Windows
End sub
Private sub CmdShutdown_Click()
Shell(“shutdown –s –f –t 0”,vbHidden) ‘Turn Off Computer
End sub
Private sub cmdrestart_Click()
Shell(“shutdown –r –f –t 0”, vbHidden) ‘Reboot Computer
End sub
نکته بین –r و –f و –t و صفر در همه مثالها فاصله وجود داره
مثال کامل شده :
مثال نمونه رو حتما دانلود کنین چون چند سطر کد بیشتر داره و میتونه اطلاعات تون رو بالا ببره