توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزش ویژوال بیسیک
shirin71
08-06-2011, 07:20 PM
visual Basic(که زين پس آن را VB خواهيم خواند) از زبانهای برنامه نويسی تحت Windows می باشد که برای کدنويسی از دستورات زبان Basic سود می برد.
VB (مانند تمام زبانهای برنامه نويسی تحت ويندوز) با استفاده از تمام امکانات زيبای ويندوز (که باعث فراگيرشدن اين سيستم عامل زيبا و توانمند در ميان کاربران شده است)، طراحی محيطی زيبا و قدرتمند را برای پروژه مورد نظر، بسيار ساده می نمايد.
در حال حاضر، به جرأت می توان گفت که يکی از انتخاب های اصلي برنامه نويسان حرفه ای در سطح جهان برای تهيه پروژه های با قابليت های ويژه، VB می باشد، خصوصاً از VB6 که مايکروسافت عملاً با افزودن توانايی های متنوع بسيار به VB، حتی حاضر شد از ديگر زبانهای معروف تحت ويندوز خود مانند Visual C++ و Visual Foxpro بگذرد و سعی در هدايت تمام برنامه نويسان به سوی VB داشته باشد.
در حال حاضر که به تهيه اين جزوه همت گماردم، نسخه آزمايشی VB.net در بازار وجود دارد ولی عموماً برنامه نويسان ازVB6 استفاده می کنند و لذا ما نيز اين نسخه ازVB را برای آموزش انتخاب می کنيم، هر چند تمام خوانندگان عزيز می دانند که عموماً با فراگيری يک نسخه از يک برنامه، فراگيری نسخه های بعدی آن کار چندان دشواری نخواهد بود.
خوانندگان عزيز توجه داشته باشند که برای فراگيریVB، آشنايی با ويندوز و Basic لازم است. همچنين بهتر است در هنگام مطالعه، VB باز باشد و مطالب را در همان لحظه کار کنند.
shirin71
08-06-2011, 07:20 PM
معرفی بخشهای وی بی
هنگامی که VB اجرا می شود، توسط پنجره ای (شکل1)، نوع پروژه ای که می خواهيد طراحی کنيد از شما خواسته می شود.
http://www.schoolnet.ir/tutorial/vb/images/vb2.ht5.jpg (http://javascript%3cb%3e%3c/b%3E:showpic%28%27vb2.ht6.jpg%27,326,269%29)
همان طور که ملاحظه می فرماييد، انواع مختلفی از پروژه ها در اين پنجره وجود دارد که در ادامه به برخی از آنها خواهيم پرداخت، ولی فعلاً نوع استاندارد پروژه های VB يعنی نوع Standard EXE را انتخاب و آن را باز(Open) می کنيم. اين نوع پروژه (که غالب پروژه ها را در بر می گيرد) برای تهيه برنامه های کاربردی(Applications) مورد استفاده قرار می گيرد.
پس از باز کردن پروژهStandard Exe ، پنجره اصلیVB (شکل 2 ) برای اين نوع پروژه باز می شود:
http://www.schoolnet.ir/tutorial/vb/images/vb2.ht7.jpg (http://javascript%3cb%3e%3c/b%3E:showpic%28%27vb2.ht8.jpg%27,571,382%29)
اين پنجره، علاوه بر آنچه عموماً در پنجره های ويندوز می بينيم (مانند 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 ها و نحوه کدنويسي برای آنها مطالب مفيدی خواهيم آموخت.
shirin71
08-06-2011, 07:21 PM
مفاهیم بنیادی
در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 مربوط می شود) روی ندهد، اين کدها اجرا نخواهند شد.
shirin71
08-06-2011, 07:22 PM
اولین پروژه و آشنایی با برنامه نویسی وی بی
به عنوان اولين پروژه، قصد داريم فرمی داشته باشيم با دو دکمه Message و Exit که اگر در دکمه Message کليک شد، پيغامی نمايش داده شود و اگر دکمه Exit کليک شد از برنامه خارج شود(شکل3):
http://www.schoolnet.ir/tutorial/vb/images/vb2.ht1.jpg (http://javascript%3cb%3e%3c/b%3E:showpic%28%27vb2.ht2.jpg%27,305,179%29)
ابتدا فرمی که بر روی صفحه نمايش باز است (فعلاً به نام Form 1 ) را به اندازه دلخواه در می آوريم و در حالی که Selectاست، از پنجره Properties (سمت راست تصوير) ، مشخصه (Property) های زير را چنين Set می کنيم:
1- مشخصه Name آن را به frmFirstProject تغيير می دهيم.
2- مشخصه Caption آن را به First Project تغيير می دهيم.
مشخصه Caption معمولاً عنوانها را تغيير می دهد. مثلاً در مورد فرمها، آنچه در اين مشخصه Set شود در Title Bar از آن فرم ديده می شود يا در مورد دکمه ها، آنچه در اين مشخصه قرار داده شود، آن چيزی است که بر روی دکمه ( به عنوان نام دکمه ای که ُکاربر می بيند) ديده می شود.
مشخصه Name يکی از مهمترين مشخصه هايی است که بايد برای تمام کنترلها Set شود. آنچه در اين مشخصه قرار گيرد، نامی است که VB آن کنترل را به اين نام می شناسد (و خصوصاً در هنگام کدنويسی و برای دسترسی به کنترلها، بسيار مورد استفاده واقع می شود). به طور پيش فرض VB برای هر کنترل يک Name در نظر می گيرد، اما در پروژه های واقعی ، معمولاً تعداد کنترلها آنقدر زياد می شوند که نامهای پيش فرض به سختی در ذهن می ماند. برای اين منظور بهتر است به کنترلها، نامهايی را نسبت دهيم که از جهتی با او متناسب باشد. لذا بهتر است اولاً در نام آنها چيزی باشد که نشان از نوع آن کنترل باشد و عبارتی نيز باشد که بيانگر موضوع يا کار فعلی آن باشد. به عنوان مثال شما می بينيد که ما در مشخصه Name از form ، گفتيم که قرار دهيم: frmFirstProject که frm به خاطر تشخيص Form بودن آن است و First Project به خاطر تشخيص اينکه اين فرم برای First Project است. يا مثلاً به فرض اگر بخواهيم دکمه ای به نام Exit بر روی فرمی داشته باشيم، من ترجيح می دهم که نام آن را cmdExit بگذارم که cmd را از Command Button گرفته ام. توجه داريم که اين نامی است که VB آن را می شناسد وگرنه برای زيبايی کار Caption اين دکمه را همان Exit می گذاريم و اين نام گذاری به زيبايی پروژه ما لطمه ای وارد نمی کند.
برای ادامه، دو دکمه (Command Button) بر روی فرم قرار می دهيم (که برای اين منظور از پنجره Controlها که در سمت چپ تصوير است، کنترل Command Button به شکلhttp://www.schoolnet.ir/tutorial/vb/docs/Book1/vb4_files/image001.jpgرا دابل کليک می کنيم و يا با يک Click و انتخاب آن، بر روی فرم، به اندازه دلخواه Drag & Drop می کنيم) و جای آنها را به مکان دلخواه مورد نظر (به وسيله Drag & Drop آنها) تغيير می دهيم. آنگاه برای يکی از آنها:
1- مشخصه Name را به cmdMessage تغيير می دهيم.
2- مشخصه Caption را به Message تغيير می دهيم.
و برای ديگری تغيير می دهيم:
1- مشخصه Name را به cmdExit.
2- مشخصه Caption را به Exit.
که پس از اين، شمای ظاهری (Interface) برنامه کامل شده است و بايد به کدنويسي آن پرداخت.
اگر بر روی دکمه Exit دابل کليک کنيد (البته هنوز در Design Time هستيم و نه Run Time)، Event Procedure مربوط به رويداد Click (Event) از آن را به صورت زير باز می کند:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub cmdExit_Click ()
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
که هر دستوری که در اين Procedure (يعنی بين خط Private و خط End Sub) نوشته شود، در زمان اجرا، وقتی کاربر روی دکمه Exit کليک می کند، اين دستورات اجرا خواهند شد.
دستوری که بايد در cmdExit_Click نوشته شود بسيار ساده است:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub cmdExit_Click ()
End
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
دستور End هر جايی از برنامه که اجرا شود فوراً اجرای برنامه را متوقف و از آن خارج می شود.
حال اگر به ترتيبی که در بالا ذکر شد، Event Procedure مربوط به رويداد click از دکمه Message را نيز باز می کنيم و آن را به صورت زير تغيير می دهيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub cmd, Message - Click
MsgBox “The first project was done successful” و و “Thanks”
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
پروژه مورد نظر آماده شده شده است. دستور MsgBox (مخفف Message Box )باعث می شود تا يک کادر پيغام بر روی صفحه نمايش ظاهر شود و تا زمانی که دکمه OK از آن را فشار دهيم، پيغامی را نمايش دهد. در اين دستور پارامتر اول، پيغام مورد نظر را به صورت string (يک داده متنی) دريافت مي کند (در VB هر عبارتی که بين دو علامت " " قرار گيرد، string فرض می شود) و پارامتر سوم نيز به عنوان Message Box (که در Title Bar آن آورده خواهد شد) را به صورت متنی دريافت می کند. توجه داريم که بين هر دو پارامتر از علامت کاما (,) استفاده می کنيم و بنابراين در دستور MsgBox برنامه مان برای اينکه پس از پارامتر اول، پارامتر سوم را وارد کنيم بين آن دو پارامتر، دو بار کاما گذاشته ايم.
حال برنامه تان را اجرا کنيد و نتيجه کار را ببينيد (اجرای برنامه در VB توسط کليد F5 صورت می گيرد.
ذکر چند نکته:
1- اگر بخواهيد فشردن ALT+X همان عمل دکمه Exit را انجام دهد(ايجاد(Hot key) ، کافی است در Caption اين دکمه چنين بنويسيد: E&xit که در اين صورت در زمان اجرا، زير حرف x يک underline (زير خط) می کشد که در ويندوز اين حالت نشانگرHot key داشتن آن حرف است ، همين کار را هم در مورد دکمه Message انجام دهيد.
2- در هنگام کدنويسي اگر چند حرف اول يک کلمه شناخته شده VB (مانند نام کنترلها و يا Property ها، Method ها و ...) را بنويسيم و CTRL+Space را فشار دهيم، اگر تنها يک کلمه با حرف اول برابر آنچه شما نوشته ايد پيدا کند، بقيه حروف را خود، کامل می کند و اگر تعدادی کلمه با اين مشخصات پيدا کند، ليست آنها را نمايش می دهد که می توانيد يا يکی از آنها را انتخاب کنيد (بر روی کلمه از ليست برويد و کليد space را بزنيد) و يا تعدادی از حروف آن را بنويسيد تا محدوده کلمات مشابه کوتاهتر شود. اين کار را حتماً امتحان کنيد!
3- زمانی که يک فرم باز می شود، به ترتيب چهار Event بر روی آن رخ می دهد:
http://www.schoolnet.ir/_themes/fpg0039/dot.gif Initialize
http://www.schoolnet.ir/_themes/fpg0039/dot.gif Load
http://www.schoolnet.ir/_themes/fpg0039/dot.gif Activate
http://www.schoolnet.ir/_themes/fpg0039/dot.gif Got focus
که زمانی که رويداد اول رخ می دهد، هنوز object های روی فرم ايجاد نشده اند و قابل دسترسی نيستند. اين object ها در load ساخته می شوند، اما هنوز فرم نمايش داده نشده است. وقتی فرم نمايش داده می شود، رويداد Activate و وقتیfocus به آن داده می شود، رويداد Got focus روی مي دهد. (منظور از گرفتن focus اينست که آن کنترل خاص که در اينجا فرم است، کانون تمام پيامها شود، مثلاً اگر کليدی زده شد به آن فرستاده شود و ...).
4- برای ذخيره کردن پروژه از منوی فايل و گزينه Save استفاده می شود که بايد تمام فرمها، ماژولها، ... و اصل پروژه را جداگانه ذخيره کرد. لذا اگر شما برنامه First Project راsave کنيد، يکبار نام فرم را save می کند (با پسوند.frm) و يکبار فايل پروژه را (با پسوند.VBP).
shirin71
08-06-2011, 07:22 PM
مثالی دی گر و استفاده ار Label و Text box
فرض کنيد بخواهيم فرمی داشته باشيم که دارای دو Text Box (که در VB برای عمليات دريافت اطلاعات از کاربر (DataEntrq) معمولاً از اين کنترل استفاده می شود) برای درجه سيلسيوس و درجه فارنهايت باشد و توسط يک دکمه (و در واقع با فشردن آن توسط کاربر) مقداری که در Text box مربوط به درجه سيلسيوس نوشته شده بود را به فارنهايت تبديل کند و نتيجه را در Text Box مربوط به آن درج نمايد. (توجه: اگر Cمقدار درجه برحسب سيلسيوس و Fمقدار درجه برحسب فارنهايت باشد، تبديل سيلسيوس به فارنهايت از فرمول F=9/5 C+32 محاسبه می شود). شکل نهايی فرم را می توانيد در شکل 4 ببينيد.
http://www.schoolnet.ir/tutorial/vb/images/vb2.ht1.jpg (http://javascript%3cb%3e%3c/b%3E:showpic%28%27vb5.ht2.jpg%27,278,113%29)
برای اين منظور، از جعبه ابزار (جعبه حاوی کنترلها) ، دو برچسب (Label) که در جعبه ابزار به شکلhttp://www.schoolnet.ir/tutorial/vb/docs/Book1/vb5_files/image001.jpg ديده می شود را بر روی فرم قرار می دهيم(برچسب(Label) ها در VB معمولاً زمانی استفاده می شود که بخواهيم بر روی فرم، عبارتی را به کاربر نشان دهيم که او قابليت تغيير آن را نداشته باشد.) آنها را بوسيله Drag & Drop به مکان دلخواه منتقل می کنيم و برای يکی از آن دو:
1- مشخصه Name را به lblCelsius
2- مشخصه Caption را به Celsius
و برای ديگری:
1- مشخصه Name را به lblFahrenheit
2- مشخصه Caption را به Fahrenheit
تغيير می دهيم. توجه داريم که در نامگذاری Label ها با سه حرف اول lbl آغاز کرده ايم. همچنين توجه داريم که در شکل 4 ، بر روی فرم، عبارات Celsius و Fahrenheit در واقع همين دو Label هستند.
نکته: برای Label هايک مشخصه (Property) ديگر به نام Auto Size وجود دارد که اگر مقدار آن را به Trueتغيير دهيم، اندازه (size) آن به طور اتوماتيک به اندازه متن (caption) داخل آن خواهد شد و بنابراين معمولاً بهتر است اين مشخصه را نيز set کنيم.
حال دو Text Box (جعبه متن) در مقابل اين Label (Text Box ها در جعبه ابزار به شکلhttp://www.schoolnet.ir/tutorial/vb/docs/Book1/vb5_files/image002.jpgديده می شوند، معمولاً برای نمايش و دريافت اطلاعات به طور توأم به کار می رود (بر عکس Label ها که فقط وظيفه نمايش اطلاعات را به عهده داشتند) و خصوصاً برای فرمهای DataEntrq (دريافتی اطلاعات) بسيار مناسب هستند. پروژه فعلی ما، نمونه ای کوچک از فرمهای DataEntrq است) و مناسب با هر يک از برچسب ها، برای يکی از آن دو Text Box :
1- مشخصه Name رابه txtCelsius تغيير می دهيم.
2- مشخصه Text را خالی می کنيم.
و برای ديگری:
1_ مشخصه Name را به txtFahrenheit تغيير می دهيم.
3- مشخصه Text را خالی می کنيم.
واضح است که در نامگذاری TextBox ها نيز از قرارداد سه حرف اول متناسب با نوع شئ، استفاده کرديم و سه حرف اول آنها را txt گذاشتيم.
مشخصه Text در Textbox ها آن متنی است که داخل آن متنی است که داخل آن نوشته می شود(شبيه مشخصهCaption در Label ها) و چونقرار است کاربرما آن را وارد کند، آن را خالی (NULL) کرديم.
حال يک دکمه (Command button) نيز به فرم اضافه و:
1- مشخصه Name را به cmdConvent
2- مشخصه Caption را به convent
تغيير می دهيم.
خوب، ظاهر (Interface) برنامه آماده شد. حال به کدنويسی برای آن می پردازيم. اين اولين باری است که می خواهيم در زمان اجرا (Run Time) از مشخصه ای استفاده کنيم (مشخصه Text از txtCelsiusکه توسط کاربر وارد شده) و مشخصه ای را در اين حال (Run Time) تغيير دهيم (مشخصه Text ازtxtFahrenheit که بايد نتيجه را بنويسد)
در VB هنگام کدنويسی برای Run Time هر زمان بخواهيم از يک Object استفاده کنيم، کافی است نام (Name) آن را بنويسيم و اگر بخواهيم به يکی از مشخصه های آن دست يابيم، کافی است پس از نام آن يک نقطه (Dot) قرار دهيم و سپس نام مشخصه (Property) مورد نظر خورد را بنويسيم.
با توجه به اين مطلنب، ديگر نوشتن کدهای مثال فوق کار چندان دشواری نيست. اگر بر روی دکمه Convent (البته در Design Time ) دابل کليک نماييد، در اينصورت Procedure مربوط به رويدادِ(Event) کليک از آن باز می شود که کافی است در آن نوشته شود:
txtFahrenheit.Text = (9/5*txtCelsius.Text) + 32
يعنی Procedure بايد به شکل زير شود:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub cmdConvent_Click ()
txtFahrenheit.Text = (9/5*txtCelsius.Text) +32
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
واضح است که وقتي مشخصه Text از يک Text Box در سمت يک تساویِ جايگزينی قرار می گيرد، مقدار فعلی آن در عمليات شرکت می کند و وقتی اين مشخصه در سمت چپ اين جايگزين قرار می گيرد، مقادير محاسبه شده در آن قرار می گيرد.
بنابراين، Procedure فوق می گويد که وقتی بر روی دکمه Convent کليک شد، هر مقداری که کاربر، داخل جعبه Celsius نوشته باشد را در 9/5 ضرب و با32 جمع کن و مقدار نهايی را داخل جعبه مربوط به Fahrenheit بنويس.
اين برنامه را حتماً بنويسيد، آن را اجرا منيد و با نحوه استفاده از Property ها در اين کدنويسی بری Run Time آشنا شويد. در ادامه، بيشتر با اين نوع استفاده از Property ها (يعنی set کردن در کدنويسی بجای set کردن در پنجره Properties از Design Time) مواجه خواهيم شد. و مهم است که اين نوع استفاده را خوب درک کنيم.
نکته: مشخصه Text برایText Box ها و مشخصه Caption برای Label ها، مشخصه های پيش فرض آنها محسوب می شوند و اگر نام آنها را بدون هيچ مشخصه ای بنويسيمف اين مشخصه ها در نظر گرفته می شود، اذا مثلاً در Procedure بالا می توانستيم بجای txtCelsius.Text از خود txtCelsius نيز استفاده کنيم.
shirin71
08-06-2011, 07:22 PM
تغییری در وضعیت مثال قبل و استفاده از رویداد key Up
فرض کنيد بخواهيم مثال قبل را طوری تغيير دهيم که با نوشتن هر رقمی در txtCelsius ، بدون نياز به فشردن کليد، نتيجه به طور خودکار در txtFahrenheit نوشته شود.مثلاً به محض اينکه عدد8 رازديم، تبديل شده 8 را به فارنهايت بنويسيد و به محض فشردن کليد 0 (روی هم شده است80) تبديل شده 80 را به فارنهايت بنويسد و ...
ابتدا کدهای نوشته شده برای cmdconvert را پاک کنيد و سپس خود کليد را نيز از روی فرم حذف کنيد تا به سراغ کدنويسی برای خودText Box ها برويم.
Text Box ها دارای جهار رويداد (Event) مهم می باشند:
KeyDown – KeyUp – KeyPress – Change
زمانی که فوکوس(تمرکز) به يک Text Box داده شود، اگر کليدی از صفحه کليد زده شود، ابتدا رويدادKeyPress رخ می دهد ( و اين به سيستم می فهماند که يک کليدی فشرده شد) ، سپس رويداد KeyDown رخ می دهد ( و اين به سيستم می فهماند که کليد زده شده، تازه زده شده است و هنوز فشرده است) و وقتی دستمان را از روی کليد برداريم، رويداد KeyUp رخ می دهد.
رويداد Change نيز زمانی که هر تغييری در مقدار داخل Text box انجام شود، روی می دهد (و لذا مثلاً اگر کليدی مثل Arrow Keys (کليدهای حرکتی) که تغييری در مقدار داخل Text Box انجام نمی دهد زده شود، رويداد Change رخ نمی دهد.)
توجه داشته باشيم که KeyDown (وKeyUp) برای همه کليدهای صفحه کليد رخ می دهد اما رويداد KeyPress برای برخی مثل Arrow Keys رخ نمی دهد.
Event Procedure مربوط به KeyDown و KeyUp دارای دو آرگومان (پارامتر) هستند:
1- پارامتر keycode که کد اسکی کليد فشرده شده را بر می گرداند.
2- پارامتر Shift که يکی از چهار مقدار 0 و 1 و 2 و 3 را بر می گرداند. اگر مقدار برگشتی آن يک باشد، يعنی در حال فشردن کليد زده شده، کليد Shift پايين بوده، مقدار برگشتی دو نشانگر پايين بودن کليدAltو مقدار برگشتی برابر سه، نشانگر پايين بودن کليد Control می باشد و صفر بودن آن، فشردن کليد بدون پايين بودن هيچ يک از اين سه کليد می باشد. و Event Procedure مربوط به KeyPress تنها يک آرگومان KeyAscki دارد که کد اسکی کليد فشرده شده را برمی گرداند.
با توجه به مطالب گفته شده، کافی است برای رويدادِ (Event) KeyUp از txtCelsius چنين بنويسيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub txtCelsius_KeyUp (KeyCode As Integer, shift As Integer)
txtFahrenheit = (Val (txtCelsius)*9/5) + 32
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
ذکر چند نکته:
1- اگر بر روی يک Text Box در Design Time دابل کليک کنيد، به طور پيش فرض، رويداد Change از آن را برای کدنويسی باز می کند. اگر می خواهيم Event Procedure رويدادهای ديگر را بياوريم، کافی است از Combo Box منوی باز شونده عمودی کرکره ای که يک فلش رو به پايين سمت راست خود برای باز شدن منو دارد) سمت راست بالای صفحه کدنويسی، يکی از Event Procedure ها را به دلخواه انتخاب کنيم. Combo Box سمت چپ آن هم نام تمام Object های استفاده شده در آن فرم خاص را دارد که هر کدام انتخاب باشد، در Combo Box سمت راست، Procedure های آن Object خاص را ليست خواهد کرد. در شکل 5 برخی از رويدادهای مربوط به txtCelsius را می بينيد.
http://www.schoolnet.ir/tutorial/vb/images/vb6.ht3.jpg (http://javascript%3cb%3e%3c/b%3E:showpic%28%27vb6.ht4.jpg%27,282,214%29)
2- همانطور که می بينيم در Procedureفوق برای Text Box ها، نام هيچ مشخصه ای را نياورديم که همانطور که قبلاً توضيح داده شد، در اينصورت به طور پيش فرض، مشخصه Text برای آنها در نظر گرفته می شود.
3- تابع Val (مخفف Value) مقدار عددی يک string را برمی گرداند. از آنجا که مقدار داخل txtCelsiusاز نوع string 0متنی) است ولی بايد بر روی آن عمل ضرب و تقسيم و جمع را انجام دهيم. ابتدا آن را توسط تابع Val، عددی نموديم. (هر چند VB تا جای ممکن سعی می کند خودش اين تبديلات را اگر ما هم نگذاريم، انجام دهد ولی بهتر است عادت شود، برای جلوگيری از خطاهای احتمالی، شرايط هر موقعيت را فراهم آوريم.)
ادامه:
آخرين کاری که بايد برای پروژه Second Example انجام دهيم، جلوگيری از خطای Type Miss Mach است. اين خطا زمانی روی می دهد که در يک عمليات، مقادير مناسب نباشند. مثلاً اگر بخواهيم مقدار متنی “Ali” را در مثلاً 5 ضرب کنيم، اين خطا (که در VB، خطای شماره 13 است) رخ می دهد.
در برنامه ما هم، اگر کاربر، در txtCelsius بجای يک عدد، حرفی را بنويسد، هنگام ضرب شدن در 9/5، همين خطا رخ خواهد داد.
برای جلوگيری از بروز خطا و گرفتن کنترل خطا بدست برنامه، از تابع On Error استفاده می کنيم. اگر Procedure مربوط به رويداد Key Up از txtCelsius را به صورت زير تغيير دهيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub txtCelsius–KeyUp (KeyCode As Integer, shift as Integer)
On Error Goto xx
txtFahrenheit = (txtCelsius * 9/5) + 32
Exit Sub
xx:
IF Err. number = 13 then
txtFahrenheit = “can’t convert “
End IF
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
در اينصورت تابع On Error می گويد که وقتی به خطايی در ادامه برخوردی به خطی از Procedure که دارای برچسب xx (يک برچسب اختياری) است برو (Goto xx) . اگر برنامه به اين خط برود (يعنی وقتی خطايی رخ داد) ، بررسی می کند اگر شماره خطای رخ داده شده (Err يک Object هميشگی در VB است که مشخصه number از آن، شماره شماره خطای رخ داده را در خود نگهداری می کند) برابر B بود، بجای convert کردن، در txtFahrenheitبنويسيد” can’t convert “ (اميدوارم نحوه بکارگيری دستورات شرطی (IF sentences) را بدانيد). تنها نکته ای که هست اينکه اگر خطا رخ نداد و convert انجام شد، ديگر نبايد به خط xx وارد شود و لذا از دستور Exit sub استفاده کردع ايم. اين دستور در هر جايی از يک sub اجرا شود، بلافاصله از آن خارج می شود و دستورات ديگر را اجرا نمی کند.
shirin71
08-06-2011, 07:23 PM
مثالی برای رویداد Key Press
فرض کنيد بر روی فرم، يک Text Box به نام txtUserName قرار داده ايم و بخواهيم کاربر، هر حرفی را داخل آن نوشت، با حرف بزرگ انگليسی زده شود (يعنی اگر وارد کرد a، در Text Box درج شود A) در اين صورت کافی است برای رويداد KeyPress از آن بنويسيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub txtUserName_KeyPress (KeyAscii As Integer)
KeyAscii = ASC (Ucase (Chr (KeyAscii)))
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
دستور بکار رفته در اين Procedure می گويد که کد اسکی کليد فشرده شده را (توسط آرگومانِ keyAscii) دريافت کن، کاراکتر آن را (توسط تابع Chr) پيدا کن، آن کاراکتر را به حرف بزرگ تبديل کن (توسط تابع Ucase مخفف Upper Case) و آنگاه کد اسکی حرف تبديل يافته را (توسط تابع ASC) پيدا کن و دوباره در آرگومان keyAscii قرار بده. به اين ترتيب کاربر هر کليدی را که فشار دهد، حرف بزرگ آن در Text Box درج می شود.
برخی مشخصه های Text Box ها:
Name -1 : نامی که VB آن را با اين نام می شناسد.
Alignment -2: تراز متن داخل Text Box (راست چين، وسط چين، چپ چين)
Appearance -3: با مقدار Flat و 3D که سه بعدی بودن يا تخت بودن آن را مشخص می کند.
Back Color -4: رنگ زمينه Text Box
Border Style -5: که تعيين می کند که text Box حاشيه داشته باشد (fixed Single) و يا خير (None)
Enable -6: اين مشخصه برای هر کنترلی False باشديعنی آن کنترل غير فعال است (رنگ خاکستری شده کنترلها در ويندوز نمايشگر False بودن Enable آن است).
Font -7: نوع فونت متن
Fore Color -8: رنگ متن
Height -9: ارتفاع Text Box
Left -10: فاصله گوشه چپ و بالای Text Box از Container (دربرگيرنده) آن (تا به حال يک دربرگيرنده (container) را ديده ايم که فرمها می باشند. Container ها به کنترلهايی گويند که کنترلهای ديگر می توانند بر روی آن قرار گيرند مثل کنترل Frame يا کنترل Picture).
Locked -11: که اگر مقدار آن True باشد، Text Box توسط کاربر، قابل ويرايش (Edit) نخواهد بود.
Max Length -12: حداکثر تعداد کاراکتری که می تواند داخل Text Box قرار گيرد که اگر مقدار آن صفر باشد، محدوديت تعداد نخواهد داشت.
Mouse Icon -13: آيکون ماوس وقتی روی آن قرار می گيرد (به شرطی که مشخصه بعدی يعنی Mouse Pointer بابر Custom تغيير داده شود.
Mouse Pointer -14: نمايشگر ماوس وقتی روی آن است که اگر برابر Custom شود، هر چه در Mouse Icon، set شده باشد، آيکون ماوس می شود.
Multi Line -15: اگر مقدار آن برابر True شود، می توان در Text Box، چند خطی نوشت و در واقع آن را شبيه يک Editor نمود.
Password Char -16: گه اگر يک کاراکتر در آن قرار گيرد، هرچه داخل Text Box نوشته شود، با آن کاراکتر ديده می شود (شما در وارد کردن Password در هر ويندوز مسلماً با مقدار * برای Password برخورد داشته ايد).
Right To Left -17: که اگر مقدار آن True باشد، پاراگراف راست به چپ می شود (مثل آنچه ما در فارسی نوشتن به آن نيازمنديم).
Scroll Bars -18: اگر مقدار Multi Line برابر True باشد، توسط مشخصه Scroll Bars می توان وجود scrollbar عمودی (vertical) ، افقی (horizontal) و يا ترکيبی از آن دو (Both) را داشت.
Tab Index -19: ترتيب پرش از کنترل به کنترل ديگر هنگام زدن کليد Tab. مثلاً اگر سه Text Box بر روی فرم داشته باشيم و مقدار Tab Index آنها به ترتيب 0 و 1 و 2 بگذاريم، در هنگام اجرا، فوکوس به Text Box با مقدار Tab Index برابر صفر داده می شود که اگر کليد Tab را بزنيد، فوکوس به Text Box با مقدار Tab Index ببرابر يک داده خواهد شد و الی آخر.
Tab Stop -20: که اگر مقدار آن برای کنترلی False باشد، با زدن کليد Tab هيچگاه فوکوس به آن داده نخواهد شد (با Tab نمی توان روی آن رفت).
Tag -21: عملاً کار خاصی انجام نمی دهد و فقط می توانيم چيزی را در آن ذخيره کنيم که بعداً خودمان از آن استفاده کنيم.
Tool Tip Text -22: که مقدار آن هر چه باشد وقتی در Run Time ماوس را لحظه ای روی آن کنترل خاص نگه داريم، يک راهنمای کوتاه زرد رنگ با متن برابر مقدار تعريف شده در Tool Tip Text از آن بيرون خواهد آمد.
Top -23: فاصله گوشه راست و بالای کنترل از container (دربرگيرنده) خود.
Visible -24: که اگر مقدار آن False باشد، آن کنترل توسط کاربر (يعنی در Run Time) ديده نخواهد شد.
Width -25: عرض کنترل
توجه:
1- بسياری از مشخصات فوق در کنترلهای ديگری غير از Text Boxها هم با همان کاربرد، وجود دارند.
2- از مشخصاتی که در بالا آورده نشد، بزخی را در جای خود توضيح خواهيم داد.
نکته:
می توان برنامه را توسط کليد F8، خط به خط اجرا کرد. در اين حال اگر ماوس را روی هر متغيری در پنجره کدنويسی نگه داريم، مقدار فعلی آن را به صورت Tool Tip می نويسد.
از اين مورد، در Debug کردن و يافتن خطاهای برنامه کمک بسياری می توان گرفت.
همچنين اگر در پنجره Immediate در هنگام Run Time دستوری را بنويسيم، اين دستور بلافاصله اجرا خواهد شد. مثلاً می توانيم يک متغير را فوراً مقدار دهی کنيم يا ...
همچنين اگر بر روی هر خطی کليد F9 را بزنيم، يک Break (شکست) روی آن خط ايجاد می کند، حال اگر کليد F5 را بزنيد، برنامه اجرا می شود تا به آن خطِ Break شده برسد و در آنجا متوقف می شود. که برای ادامه برنامه می توان بسته به مورد، از F5 يا F9 استفاده کرد.
shirin71
08-06-2011, 07:23 PM
مشخصه causes validation
شايد زمانی که داشتيد روی مشخصات (Properties) مربوط به Text Box نظر می کرديد، مشخصه causes Validation را نيز ديده باشيد که ما در بخش قبل از آن نام نبرديم. اين مشخصه در بسياری از VCLها نيز وجود دارد و دارای کاربرد بسيار زيبايی است که شايد اگر وجود نداشت، برای شبيه سازی آن بوسيله کدنويسی، زمان زيادی را صرف خود می کرد.
فرض کنيد بر روی فرم يک Text Box به نام txtNumber وجود دارد که برای دريافت نمره يک درس دانش آموزی از کاربر، استفاده می شود. ترجيح می دهيم کاربر نتواند اين فرم را save کند (نتواند به سراغ کليد cmdSave برود) مگر اينکه نمره صحيح (که در فاصله صفر تا بيست است،) را وارد نموده باشد. اما مثلاً بتواند روی دکمه cmdCancel برود و فرم را Cancel نمايدو يعنی می خواهيم اگر نمره در دامنه صحيح خود نبود روی برخی ديگر از آنها نرود.
اگر برای رويدادِ(Event) Validate از txtNumber ، چنين داشته باشيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub txtNumber_Validate (Cancel As Boolean)
IF Val (txtNumber) > 20 then
Cancel = True
End IF
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Event Procedure فوق می گويد هر وقت که txtNumber ، Validate شد، بررسی کن که آيا نمره کمتر از 20 هست يا خير که اگر نبود، پارامتر Cancel را True نمايد. حال اگر مشخصه Causes Validationاز هر کنترلی را True نماييم، در صورتی که Val(txtNumber)>20باشد، کاربر نمی تواند، آن کنترل را فوکوس دهد. لذا اگر مشخصه مذکور را برای کليد cmd Save برابر True و برای cmdCancel برابر False تغير دهيم، درصورت نبودن نمره در فاصله مناسب، کاربر می تواند عمليات دکمه Cancel را انجام دهد اما عمليات دکمه Save را خير مگر اينکه دوباره Text Boxمذکور را با عددی مناسب Validate نمايد.
توجه کنيد که می توانيد برای زيبايی برنامه مذکور برای رويداد Key up از txtNumber نيز چنين داشته باشيم.
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub txtNumber_KeyUp (KeyCode As Integer, shift As Integer)
IF Value (txtNumber)>20 then
txtNumber. Forecolore = VBRed
Else
txtNumber. Forecolore = VBBlack
Evd IF
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
که برای نمايش اينکه با وارد نودن نمره ای به کاربر خطايی رخ داده است، رنگ متن آن را به رنگ قرمز (Red) در می آوريم و در غير اينصورت (يعنی بدون خطا) رنگ متن را به رنگ سياه (Black) در خواهيم آورد.
ذکر چند مشخصه ديگر:
1- اگر برای يک کليد (Command Button)، مشخصه Cancel را به True قرار دهيم، در صورت زدن کليد (Escape) ESC توسط کاربر، رويداد Click از اين کليد روی می دهد.
2- اگر برای يک کليد، مشخصه Default را به True تغيير دهيم، در صورت زدن کليد Enter توسط کاربر، رويداد Click از آن روی خواهد داد.
3- اگر برای يک فرم، رويداد Key Preview را به True تغيير دهيم، هر کليدی را کاربر از صفحه کليد فشار دهد، ابتدا اين کليد به رويداد KeyPress از فرم فرستاده می شود و آنگاه به رويداد Key Press از کنترلی که Focus در اختيار آن است، فرستاده می شود.
shirin71
08-06-2011, 07:23 PM
تعریف متغیر ها
ه اطمينان، قبلاً در برنامه نويسی (لااقل در Basic که پيش فرض بحث ما معرفی شده بود) از متغيرها زياد استفاده کرده ايد. در برخی زبانهای برنامه نويسی (مثل Basic) ، نوع متغيرهای بکار رفته در برنامه، لازم نيست از قبل تعريف شده باشد و در هنگام اجرا، کامپايلر، خود، آن را به نوع مورد نياز (مثل Integer برای برای داده های عددی صحيح، يا String برای نوع داده رشته ای و کاراکتری و ...) تعريف و اجرا خواهد کرد. اما در برخی ديگر (مانند زبان برنامه نويسی Pascal)لازم است، نوع داده متغيرهای بکار رفته، در جايی از برنامه (و عموماً قبل از استفاده از آن) تعريف شوند. در VB، از آنجا که VB از Basic برای کدنويسی استفاده می شود، به طور معمول، نياز به تعريف نوع داده ها نيست. اما از آنجا که امروزه برنامه نويسان ترجيح می دهند که از کامپايلری برای برنامه نويسی استفاده کنند که او را به تعريف تمام متغيرها مجبور کند (زيرا اگر چنين نباشد، اگر او به اشتباه دستوری را غلط تايپ کند (مثلاً بجای then بنويسد Then) ، کامپايلر آن را به عنوان متغيری فرض می کند و در واقع بدون اينکه ما خطايی را دريافت کنيم، در روند برنامه مان مشکل پيدا می شود و خطايی رخ می دهد که شايد تشخيص علت آن سخت تر شود) ، می توانيم VB را موظف سازيم تا ما را مجبور به تعريف نوع داده متغيرها نمايد.
اگر در ابتدای هر يونيت (Unit) عبارت Option Explicit نوشته شود، VB ما را مظف می کند که در آن يونيت، هر متغيری که بخواهيم استفاده کنيم، آن را قبل از استفاده، تعريف نماييم (لذا بهتر است ابتدای همه Unitها عبارت مذکور باشد) . يونيت (Unit) ها، بخش هايی از برنامه اند که در آنها کدنويسی می شود. مثلاً هر فرم، دارای يک Unit مخصوص به خود است که تمام Event Procedureهايی که تا بحال می نوشتيم، در آن قرار می گرفت.
همچنين اگر از منوی Tools گزينه Options را اتنخاب کنيم، و از لبه General (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
shirin71
08-06-2011, 07:24 PM
ایجاد پروسیجر
در VB، علاوه بر Event Procedureها که به ازای رويداد (Event) های مشخصی انجام می شوند، می توانيم تعدادی پروسيجر را نيز خودمان تعريف کنيم که به اين نوع پروسيجر، General Procedure (پروسيجر عمومی) گفته می شود که برای اجرای آنها می بايست نام آنها در جايی از برنامه، فراخوانی شود.
در VB (مشابه Basic) دو نوع پروسيجر داريم:
1- تابع (Function)
2- روال (Sub) .
توابع قطعه برنامه هايی هستند که هرگاه نام آنها در برنامه فراخوانی شود، لزوماً يک و فقط يک مقدار را به عنوان خروجی برمی گرداند در حالی که روال (ساب روتين) ها، قطعه برنامه هايی هستند که ممکن است به تناسب دارای يک يا چند خروجی و يا حتی بدون خروجی باشند.
توابع و روالها می توانند شامل تعدادی آرگومان (پارامتر) باشند که پارامترها در توابع فقط نقش ورود اطلاعاتی از برنامه به تابع را ايفا می کنند و نام خود تابع به عنوان خروجی تابع استفاده می شود در حالی که در روالها ورود و خروج داده ها، هر دو توسط همين پارامترها انجام می شود.
شکل کلی توابع به شکل زير است:
Function functionName (Parameters)As variableType
http://www.schoolnet.ir/tutorial/vb/docs/Book1/vb11_files/image001.gif
Commands
End Function
و همچنين شکل کلی روال ها:
Sub subName (Parameters)
http://www.schoolnet.ir/tutorial/vb/docs/Book1/vb11_files/image002.gif
Commands
End Sub
shirin71
08-06-2011, 07:24 PM
نکاتی درباره پروسیجر ها
توجه داشته باشيد که در ابتدای تعريف توابع و روالها می توانيم از Private يا Public نيز استفاده کنيم و تمام سطوحی که برای تعريف متغيرها گفته شد (خصوصاً سطح فرم و سطح ماژول) ، در اينجا نيز عيناً کاربرد دارند. (پيش فرض در اينجا هم Private است). به عنوان مثال اگر بخواهيم تابعی به نام Square ايجاد نماييم که هر عددی را دريافت کرد، مربع آن را برگرداند، کافی است چنين بنويسيم (مثلاً به صورت Public در يک ماژول) :
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Public Function Square (I As Integer) As Integer
Square = I*I
End Function
http://www.schoolnet.ir/_themes/fpg0039/line.gif
ملاحظه می کنيد که در اينصورت اگر هر جايی از برنامه نام تابع را به همراه يک مقدار عددی Integer به عنوان پارامتر آن ذکر کنيم، مقدار عددی مذکور به متغير I داخل تابع منتقل شده و عمل I*I روی آن انجام می گيرد و از آنجا که گفتيم خرجی توابع نام آنها هستند، خروجی (يعنی مقدار I*I را) را به نام تابع جايگزين کرديم (يعنی Square = I*I) . حال مثلاً اگر در جايی از برنامه دستور b = Square (5) را وارد کنيم، مقدار متغير b برابر 25 خواهد شد.
توجه داريم که اگر تابع بيش از يک پارامتر ورودی داشت، بايد نام آنها با کاما (,) از هم جدا کنيم که در اينصورت در هنگام فراخوانی بايد به تعداد پارامترها، آرگومان قرار دهيم که به ترتيب در متغير مربوط جايگزين (وارد) می شود. مثلاً اگر بخواهيم تابعی به نام Multiple ايجاد کنيم که حاصلضرب دو پارامتر ورودی اول را با پارامتر ورودی سوم جمع کند و نتيجه را برگرداند، کافی است بنويسيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Function Multiple (a, b, c As Integer) As Integer
Multiple = (a*b) +c
End Function
http://www.schoolnet.ir/_themes/fpg0039/line.gif
که در اينصورت دستورات زير در محلی از پروژه (که البته دسترسی Private به تابع مذکور داشته باشد)، مقدار 17 را در Text Box به نام txtResult قرار می دهد:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
I = 3
bs = 5
g = 2
txtResult.Text = Multiple (I, bs, g)
http://www.schoolnet.ir/_themes/fpg0039/line.gif
توجه داريم که مقادير استفاده شده به عنوان آرگومانهای تابع بايد با متغيرهای به کار رفته در پارامترهای تعريف تابع از لحاظ نوع داده، يکسان باشند.حال به عنوان مثالی برای روالها فرض کنيد بخواهيم روالی به نام TF ايجاد کنيم که دو عدد را دريافت کند، بررسی کند که اگر اين دو عدد برابر بودند، جوابTrue و همچنين حاصلضرب آن دو را برگرداند. برای اين منظور اگر مثلاً در يک ماژول تعريف کنيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Public Sub TF (x, y As Integer, T as Boolean, M as Integer)
IF x = y then
T = True
Else
T = False
End IF
M = x*y
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
می توان در جايی از پروژه، روال مذکور را فراخوانی نمود، فراخوانی روالها توسط دستور Call صورت می گيرد، مثلاً اگر در جايی از پروژه، روال فوق را به صورت زير فراخوانی نماييم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
a = InputBox (“Please Enter a Number”)
Call TF (a, 15, s, p)
http://www.schoolnet.ir/_themes/fpg0039/line.gif
در صورتی که متغيرهای a و s و p تعريف شده باشند آرگومان a به پارامتر x از روال، آرگومان 15 به پارامتر y از روال، آرگومان s به پارامتر T از روال و آرگومان p به پارامترM از روال منصوب می شود. دستور InputBox يک جعبه محاورهای برای کاربر نشان می دهد که پيغامی را (در اينجا پيغام Please Enter a Number) شامل می شود و در يک جعبه متن خاص، مقداری را از کاربر مطالبه می کند که پس از وارد کردن توسط کاربر مقدار وارد شده را برمی گرداند (و در اينجا در متغير aجايگزين می کند). حال اگر کاربر مقدار 15 را وارد کند، مقدار متغير s (که بايد Boolean تعريف شده باشد) برابر True و در غير اينصورت مقدار False را شامل می شود و در هر صورت متغير p نيز حاصلضرب a و 15 را در خود شامل می شود.
تأکيد می کنيم که نوع داده آرگومانها و پارامترهای تعريف لزوماً بايد به ترتيب متناسب باشد که در غير اينصورت VB به ما خطا صادر می کند.
shirin71
08-06-2011, 07:24 PM
کنترل های Check Box و Option button
به اطمينان، از زمانی که با ويندوز کار می کنيد، از کنترلهای Check Box و Option Box استفاده بسياری بردهايد.اگر بخواهيم به کاربر (User) اين امکان را بدهيم که از بين چند گزينه، يک ، دو يا چند مورد را انتخاب کند و يا حتی هيچ يک را انتخاب نکند از کنترل Check Box به شکل (1)، و اگر بخواهيم کاربر، از ميان چند گزينه، يک و فقط يک گزينه را انتخاب کند، از کنترل Option Button (کليدهای راديويی) به شکل (2)، اين دو کنترل VCL، مشخصه ای به نام Value دارندکه از صفر يا يک بودن مقدار آن، می توانيم به انتخاب نشده بودن و انتخاب شده بودن آن گزينه خاص، پی ببريم. لذا اگر برروی يک فرم چند Check Box وجود داشت، می تواند Value هر يک از آنها صفر يا يک باشد، اما اگر برروی فرمی، چند Option Button وجود داشت، تنها يکی از آنها می تواند Value برابر يک داشته باشد و وقتی کاربر، يکی ديگر را انتخاب می کند، به طور خودکار، Value قبلی صفر و Value کنترل انتخاب شده، يک می شود.
VB دارای دو ثابت (Constant) به نامهای VBChecked و VBUnchecked می باشد که به ترتيب برابر يک و صفر می باشند که می توانيم مقدار Value کنترلهای ذکر شده را با اين ثوابت مقايسه کنيم.
کنترل Check Box ، علاوه بر دو مقدار صفر و يک برای مشخصه Value ، مقدار برابر 2 نيز برای آن دارد که اگر به آن Set شود، اين کنترل، خاکستری رنگ (Gray) می شود که معمولاً در ويندوز نشان از پيش فرض بودن دارد. همچنين کنترل مذکور، مشخصه ای هم به نام Style دارد که اگر مقدار آن را از صفر به يک تغيير دهيم، شکل Check Box به شکل دکمه ای در می آيد که يک بودن مقدار Value، باعث فشرده شدن کليد و صفر بودن آن باعث بالا بودن کليد میشود.
نکته آخری که در اينجا متذکر می شوم اينست که طبق قراری که از ابتدا گذاشته بوديم، سه حرف اول مشخصه Name کنترلها بهتر است متناسب با کنترل بگذاريم. برای Check Boxها، نام را با chk و برای Option Buttonها، نام را با opt آغاز می کنيم و ادامه نامشان را معمولاً با Caption آنها کامل می کنيم. لازم به ذکر است که مشخصه Caption هر دو کنترل مذکور، حاوی آن عبارتی است که کنار آن کنترل برای معرفی آن به کاربر می آيد.
http://www.schoolnet.ir/tutorial/vb/docs/Book1/vb14_files/image001.jpg
شکل 1
http://www.schoolnet.ir/tutorial/vb/docs/Book1/vb14_files/image002.jpg
شکل 2
shirin71
08-06-2011, 07:24 PM
مثالی از کنترل های Check Box و Option button
فرض کنيد بخواهيم فرمی شامل يک Text Box و دو Check Box با عنوانهای Bold و Italic داشته باشيم که اگر Bold، مارک خورده بود، متن داخل Text Box به صورت Bold درآيد و اگر Italic مارک خورده بود به صورت Italicفرم نهايی آن را در شکل 6 می توانيد ببينيد.
http://www.schoolnet.ir/tutorial/vb/images/vb15.h1.jpg
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub chkBold_Click ()
IF chkBold.Value = VBchecked Then
txtDisplay.FontBold = True
Else
txtDisplay.FontBold = False
End IF
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub chkItalic_Click ()
IF chkItalic.Value = VBchecked Then
txtDisplay.FontItalic = True
Else
txtDisplay.FontItalic = False
End IF
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
توجه داشته باشيم که هرگاه کاربر بر روی يک Check Box و يا يک Option Button کليک کند و يا بوسيله کليد Tab ، فوکوس را به آن دهد و روی آن کليد Space bar را بزند، رويداد Click از اين دو کنترل روی خواهد داد.
shirin71
08-06-2011, 07:25 PM
آرایه هایی از کنترل ها
حتماً يکی از الفاظی که در برنامه نويسی، از آن بهره بسياری برده ايد، آرايه می باشد. آرايه ها معمولاً خانه هايی از حافظه اند که تحت يک نام واحد و با انديس های متفاوت نامگذاری می شوند. در 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 مربوط به عضوی که رويداد بر روی آن صورت گرفته، به عنوان يکی از پارامترهای پروسيجر آن، باز می گردد. برنامه بعد را بنويسيد تا با نحوه کار آرايه کنترلها آشنا شويد
shirin71
08-06-2011, 07:25 PM
مثال:طراحی یک ماشین حساب سادهچ
فرض کنيد بخواهيم يک ماشين حساب ساده، مطابق آنچه در شکل 7 میبينيد، طراحی کنيم:
http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb1_files/image002.jpg
يک 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) تعريف شده اند و لذا مقدار آن در تمام فرم قابل دسترسی خواهد بود) :
http://www.schoolnet.ir/_themes/fpg0039/line.gif
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
http://www.schoolnet.ir/_themes/fpg0039/line.gif
توجه داريد که:
در رويدادهايی که مربوط به آرايه های کنترلی (يعنی cmd Number و cmdoperator ) است، يک پارامتر به نام Index در آن وجود دارد که شماره Index (انديس) کليدی که فشرده شده را برمیگرداند. و لذا مثلاً cmdOprator(Index).Caption برابر "+" خواهد بود، اگر کليد + فشرده شود و برابر "- " خواهد بود، اگر کليد – زده شود و ...
مشخصه (Property) پيش فرض برای Labelها Caption است و لذا هر جا lblDisplay ذکر شده است، توسط VB مانند lblDisplay.Caption در نظر گرفته می شود.
توسط دستور Select Case، يک متغير (که نام آن جلوی دستور Select Case نوشته می شود) با مقادير مختلفی (که جلوی دستورات Case بعدی نوشته می شود) چک می شود که اگر برابر هر يک از اين مقادير بود، دستور پس از همان Case اجرا می شود.
shirin71
08-06-2011, 07:25 PM
مثالی دیگر از کنترل Option button
همانطور که قبلاً نيز ذکر شد، هرگاه بخواهيم کاربر (User) از بين چند مورد، يک و فقط يک مورد را انتخاب کند (مثلاً سؤال چهار گزينه ای و ...) از کنترل Option Button استفاده می کنيم.
کنترل مذکور (مانند CheckBoxها) دارای مشخصه ای به نام Value می باشد که اگر مقدار آن برابر True باشد، انتخاب شده و در صورتی که برابر False باشد، انتخاب نشده خواهد بود. بنابراين اگر برروی فرمی مثلاً دو OptionButton قرار دهيم، مسلماً اگر مقدار Value از يکی را True کنيم، به طور خودکار مقدار Value برای ديگری False خواهد شد.زيرا فقط يکی از OptionBotton ها را می توان انتخاب کرد.
حال اگر بخواهيم OptionButtonها را روی يک فرم به صورت موضوعی دسته بندی کنيم و از هر دسته بتوانيم يکی را انتخاب کنيم، بايد به تعداد دسته ها، کنترل Frame به http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb2_files/image001.jpgشکل برروی فرم قرار دهيم و آنگاه OpiontButtonها را بر روی Frameها (نه با دابل کليک بلکه با انتخاب کنترل OptionButton و قرار دادن آن بوسيله Drag & Drop روی Frame) قرار می دهيم و سپس می توان Caption مربوط به Frameها (آن چيزی که به عنوان تيتر در بالای هر فريم نوشته می شود) و OptionButtonها (آن چيزی که جلوی هر Option Button برای معرفی آن نوشته می شود) را به دلخواه تغيير داد.
http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb2_files/image003.jpg
يک Label به نام lblDisplay و دو فريم به نامهای fraProcessor و fraOS بر روی صفحه قرار می دهيم. بر روی fraProcessor (و بوسيله انتخاب کنترل و Drag & Drop بر روی فريم) ، سه OptionButton به نامهای واحد optProcessor و با Captionهای Pentium، Pentium II و Pentium III قرار می دهيم. همچنين بر روی fraOS نيز سه OptionButton ديگر به نامهای واحد optOS و با Captionهای Windows98، Windows2000 و WindowsNT قرار می دهيم. (توجه داريم که در اينصورت دو Control Array به نامهای optProcessor و optOS ساخته ايم).
حال کدهای زير را در يونيت اين فرم می نويسيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Option Explicit
Dim proc As string
Dim os As string
Private Sub Clicked ( )
lblDisplay = “You select” + proc + “and” + os
End Sub
Private Sub Form1_load ( )
optProcessor(Ø).Value = True
optOS(Ø).Value = True
End Sub
Private Sub optOS_Click (Index As Integer)
os = optOS(Index).Caption
Call Clicked
End Sub
Private Sub optProcessor_Click (Index As Integer)
proc = optProcessor(Index).Caption
Call Clicked
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
توجه داريم که:
روال clicked در برنامه فوق هرگاه فراخوانی شود پيغام مناسب را در lblDisplay نمايش خواهد داد.
رويداد load برای يک فرم بلافاصله پس از load شدن آن فرم روی می دهد. در Event Procedure مربوط به رويداد load از Form1 در برنامه فوق، دستور داده ايم که اولين OptionButton هر فريم (با انديس برابر صفر) را انتخاب شده نمايد.
در رويدادهای Click مربوط به آرايه های optOS و optProcessor دستور داده ايم که مقدار Caption هر OptionButtonای که کليک شده را (توسط مثلاً optOS(Index).Caption ) در متغيرهای os و proc قرار دهد و سپس روال Clicked که برای نمايش بر روی label بود را فراخوانی نمايد.
shirin71
08-06-2011, 07:25 PM
شبیه سازی عمل Drag & Drop
فرض كنيد بخواهيم برنامه اي بنويسيم كه ظاهري شبيه آنچه در شكل 9 ميبينيد داشته باشد. و بتوانيم تصوير داخل PictureBox مبداُ (سمت چپ) را بوسيله Drag & Drop به PictureBox مقصد (سمت راست) منتقل كنيم.
http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb3_files/image002.jpg
شکل 9
ابتدا دو PictureBox (كه كنترل آن در ToolBox به شكل http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb3_files/image003.jpgمي باشد) را در مكانهاي خود قرار داده و مشخصه Name آنها را picSource و picTarget مي گذاريم. براي نمايش متني كه در پايين شكل 9 مي بينيد نيز مي توانيم از يك Label استفاده كنيم.
PictureBoxها داراي مشخصه اي به نام Picture هستند كه بوسيله آن ميتوانيم يك تصوير را در آن قرار دهيم. اگر بخواهيم اين مشخصه را در زمان طراحي (Design Time) تنظيم نماييم، كافيست بر روي نام اين مشخصه در پنجره Properties، دابل كليك نماييم، يك پنجره محاوره اي باز مي شود كه مي توانيم تصوير مورد نظرمان را بياوريم و آن را انتخاب كنيم. (پنجرهاي مانند پنجره هاي Open در ويندوز). اما اگر بخواهيم آن را در زمان اجرا (Run Time) تنظيم نماييم، بايد اين مشخصه را برابرتابع loadPicture( ) قرار دهيم كه مسير و نام تصوير مورد نظر به عنوان پارامتر اين تابع قرار ميگيرد. . اگر در پارامتر اين تابع چيزي قرار نگيرد، مشخصه Picture را خالي مي كند يعني PictureBox مورد نظر را (در صورتي كه داراي تصوير بوده) بدون تصوير مي كند.
حال مشخصه Picture از picSource را (در زمان طراحي) به تصوير دلخواه مورد نظر خود تغيير دهيد و در واقع يك تصوير را در آن قرار دهيد. شايان ذكر است كه مي توانيد تصاوير فراوان مناسبي را مسير Visual Studio>Common>Graphics دستگاه خود (در داخل مسيري كه برنامه Visual Studio را در آن نصب كرده ايد)، بيابيد.
به سراغ برنامه خود برويم، تا اينجا ظاهر (Interface) برنامه را ايجاد كرديد. حال لازم است به كدنويسي براي آن بپردازيم. ولي قبل از آن توضيح در مورد چند رويداد را ضروري مي دانم كه عموما غالب كنترلهاي VCL داراي اين رويدادها مي باشند:
رويداد MouseDown : زماني براي يك VCL رخ مي دهد كه دكمه اي از ماوس را روي آن VCL فشار دهيم.
رويداد MouseUp : زماني براي يك VCL رخ مي دهد كه دكمه زده شده از ماوس را رها كنيم.
رويداد MouseMove : زماني براي يك VCL رخ مي دهد كه نشانگر ماوس را بر روي آن حركت دهيم.
رويداد DragOver : زماني براي يك VCL رخ مي دهد كه VCL ديگري كه در حال Drag شدن است را بر روي اين VCL بياوريم.
رويداد DragDrop : زماني براي يك VCL رخ مي دهد كه VCL ديگري كه در حال Drag شدن است را بر روي اين VCL، Drop (رها) نماييم.
حال كه با اين رويدادها آشنا شديم، كافيست كدهاي زير را در يونيت اين فرم داشته باشيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Option Explicit
Private Sub picSource_MouseDown (Button As Integer,Shift As Integer,x As Single,y As Single)
picSource.Drag vbBegineDrag
End Sub
Private Sub picTarget_DragDrop (Source As Control)
PicTarget .Picture = picSource.Picture
picSource.Picture = loadPicture( )
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
توجه داشته باشيم كه وقتي رويداد MouseDown براي picSource روي مي دهد، توسط متد Drag از picSource (يعني توسط picSource.Drag) و به همراه پارامتر VbBeginDrag براي آن، عمل Drag آغاز مي شود و در صورتي كه عمل Drop شدن روي picTarget صورت بگيرد (يعني اگر رويداد DragDrop براي آن رخ دهد)، تصوير داخل picSource به داخل picTarget منتقل مي شود (بوسيله دستور picTarget.Picture = picSource.Picture) و سپس تصوير داخل picSource (بوسيله دستور ()picSource.Picture = loadPicture ) حذف مي شود.
و بالاخره آخرين تذكري كه در اينجا داده مي شود اينكه مشخصه Picture براي PictureBoxها مشخصه پيش فرض (Default) مي باشد و لذا مثلا بجاي pictarget.picture میتوان از pictarget نيز استفاده كرد.
shirin71
08-06-2011, 07:25 PM
استفاده از منو در فرم ها
لابد از اهميت فوق العاده زياد منوها در ويندوز مطلع هستيد. منوها علاوه بر تنوع و زيبايي فرمها، به شلوغ نشدن يك فرم توسط دكمه هاي زياد نيز كمك ميكنند.
براي درست كردن منو براي يك فرم از MenuEditor كه در منوي Tools قرار دارد استفاده مي كنيم. همچنين MenuEditor يك دكمه فوري نيز بر روي ميله ابزار استاندارد VB به شكل http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb4_files/image001.jpg دارد كه با كليك بر روي آن نيز پنجره MenuEditor باز مي شود. اين پنجره مانند شكل 10 مي باشد:
http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb4_files/image003.jpg
شکل 10
در پنجره مذكور كافيست عنوان منوي اول (مثلاMenu1) را در كادر Caption بنويسيم و مانند ساير objectهاي VB به اين منو هم يك نام (مثلاmnuMenu1) در كادر Name وارد كنيم. حال براي وارد كردن نام و عنوان منوي بعدي كافيست كليد Next را بزنيم. اما معمولا منوي بعدي، آيتمي از منوي قبلي خواهد بود. اگركليد http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb4_files/image005.jpgرا بزنيم، منوي جاري به عنوان زير منوي قبلي محسوب خواهد شد. پس از وارد كردن اولين آيتم كافيست بوسيله دكمه Next آيتم هاي بعدي اولين منو را نيز وارد كنيم. اگر يكي از آيتم ها خود شامل زير آيتم هايي بود باز هم مي توان از كليدhttp://www.schoolnet.ir/tutorial/vb/docs/Book2/vb4_files/image005.jpg سود برد. و بالاخره براي اينكه به سراغ منوي دوم برويم لازم است از كليدhttp://www.schoolnet.ir/tutorial/vb/docs/Book2/vb4_files/image007.jpgبه تعدادي استفاده كنيم كه ديگر زيرمنوي يك منوي ديگر نباشد و به همين ترتيب ساير منوها و آيتمها را نيز نامگذاري و عنواندهي ميكنيم و ساختار مورد نظرمان را براي منوها ايجاد ميكنيم.
لذا اگر منوها را در MenuEditor طوري وارد كنيم كه پنجره پايين MenuEditor مطابق آنچه در شكل 10 ميبينيد، شود، انتظار داريم در هنگام اجرا، فرمی شبيه آنچه در شکل 11 می بينيد، حاصل شود:
http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb4_files/image009.jpg
شکل 11
توجه داشته باشيد كه در MenuEditor علاوه بر آنچه تابهحال گفته شد:
• دكمه Delete براي پاك كردن يك منو (يا آيتم) استفاده مي شود.
• دكمه Insert براي افزودن يك منو (يا آيتم) ميان دو منو (يا آيتم) ديگر استفاده مي شود
• Check Boxهاي Visible و Enable به ترتيب اگر انتخاب نشده شوند، منوي مذكور ديده نمي شود و يا اينكه فقط غيرفعال (و به رنگ خاكستري) خواهد شد.
• Check Box با عنوان Checked اگر انتخاب شود، باعث خواهد شد تا كنار آن منو (آيتم) يك "چكمارك" ديده شود. (معمولا اين مشخصه در Run Time و بر حسب نياز تنظيم مي شود)
• توسط Shortcut مي توانيم يك ميانبر (Shortcut) براي يكي از آيتمها درست كنيم..
• توسط Index مي توانيم آرايه اي از منوها را طراحي نماييم ( همانطوری که آرايه ای ازساير کنترلها درست می کرديم، يعنی بايد نام دو يا چند منو را يک نام واحد بگذاريم و Index متفاوت به هريک بدهيم.)
• و توسط NegotiatePosition ميتوان نوع چيدن آيتمها (راست چين، چپ چين، وسط چين) را تعيين نمود.
چند تذكر:
• براي دستيابي به مشخصه هاي منوها نيز مانند ساير كنترلها از نام آنها و يك نقطه(Dot) و سپس نام مشخصه مورد نظر استفاده مي كنيم. مثلا اگر منويي به نام mnuOpen داشته باشيم و بخواهيم آن را غيرفعال و يا ماركدار نماييم به ترتيب از دستورات زير استفاده خواهيم كرد:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
mnuOpen.Enable = False
mnuOpen.Checked = True
http://www.schoolnet.ir/_themes/fpg0039/line.gif
• مشخصه WindowList در بحث MDI Forms خواهد آمد و از مشخصه HelpContentID نيز تنها زماني كه يك فايل HLP داشته باشيم ميتوانيم استفاده كنيم.
• اگر بخواهيم بين دو آيتم از منويي يك خط جداكننده آورده شود (آنچه در ويندوز براي جداكردن بخشهاي مختلف يك منوي خاص معمول است) كافي است بين آن دو آيتم، يك آيتم Insert نماييم، نام آن را يك نام دلخواه (مثلا mnuLine) و عنوان (Caption) آن را يك منفي (كاراكتر "-" يا اصطلاحا Dash) بگذاريم.
• اگر بخواهيم براي شي خاصی يك PopUpMenu طراحي كنيم (منوهاي بازشوندهاي كه وقتي بر روي شي كليك راست شود از آن خارج ميشود) كافيست يك منو (با آيتمهاي مورد نظر براي آن) را طراحي كنيم (و حتي در صورت نياز Visible آن را False كنيم) و در رويداد MouseDown از آن شي خاص، پس از اينكه شرط كرديم كليد زده شده كليد راست ماوس باشد (با استفاده از شرط برابري پارامتر Button از اين رويداد با مقدار ثابت VbRightButton)، با استفاده از دستور PopUpMenu، نام منوي مورد نظر را فراخواني مي كنيم يعني بايد چنين داشته باشيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub controlName_MouseDown (Button As Integer,…)
IF Button = VbRightButton Then
PopUpMenu mnuMenu1
End IF
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
كه بجاي controlName نام آن كنترلي كه قرار است كاربر روي آن كليك راست نمايد و بجاي mnuMenu1 نام آن منويي كه قرار است به صورت PopUp آورده شود را ذكر مي كنيم.
shirin71
08-06-2011, 07:26 PM
اضافه کردن Diagog Box به برنامه
مطمئنا تا بحال در ويندوز از كادرهاي محاورهاي زيادي مثل پنجره هاي Open، Save، نمايش خصوصيات چاپگر (Printer)، كادر انتخاب رنگ، كادر انتخاب Font و پنجره Help ويندوز استفاده كرده ايد.
در VBبراي نمايش اينگونه پنجرههاي محاورهاي از كنترل DialogBox استفاده ميكنيم. اين كنترل يكي از كنترلهاي Non - Visual ويژوال بيسيك ميباشد. Non-Visual Controls همانطور كه قبلا هم آمده است، انواعي از كنترلها هستند كه فقط در زمان طراحي (Design Time) بر روي فرم ديده ميشوند و در Run Run Time فقط ميتوان از اثر آنها بهره برد.
كنترل مذكور بطور پيش فرض در ToolBar وجود ندارد. براي اضافه كردن آن به ToolBar بايد از منوي Project گزينه Components را انتخاب كنيم و در ليست Componentها، گزينه Microsoft Common Dialog Control 6 را چك مارك بزنيم و آن را تاييد (OK) نماييم. در اينصورت يك كنترل به شكل http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb5_files/image001.jpgبه ToolBar افزوده خواهد شد كه مي توانيد آن را با دابل كليك بر روي فرم قرار دهيد. توجه داريم كه كنترل مذكور Non-Visual است و لذا نيازي به تنظيم مكان اين كنترل بر روي فرم نداريد.
كنترل Dialog Box داراي متدهاي زير مي باشد:
http://www.schoolnet.ir/_themes/fpg0039/dot.gif ShowColor براي نمايش پنجره محاورهاي تعيين رنگ در زمان فراخواني اين متد.
http://www.schoolnet.ir/_themes/fpg0039/dot.gif ShowFont براي نمايش پنجره محاورهاي تعيين فونت در زمان فراخواني اين متد.
http://www.schoolnet.ir/_themes/fpg0039/dot.gif ShowHelp براي نمايش پنجره محاورهاي راهنماي ويندوز در زمان فراخواني اين متد.
http://www.schoolnet.ir/_themes/fpg0039/dot.gif ShowOpen براي نمايش پنجره محاورهاي باز كردن يك فايل در زمان فراخواني اين متد.
http://www.schoolnet.ir/_themes/fpg0039/dot.gif ShowPrinter براي نمايش پنجره محاورهاي تعيين خصوصيات چاپگر در زمان فراخواني اين متد.
http://www.schoolnet.ir/_themes/fpg0039/dot.gif ShowSave براي نمايش پنجره محاورهاي ذخيره كردن در يك فايل در زمان فراخواني اين متد.
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub cmd_Click ( )
cdb.ShowColor
lbl.ForeColor = cdb.Color
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
يا اگر بخواهيم توسط دکمهای ديگر به نام cmd2، پنجره Open باز شود، و هر فايلی از هر مسيری را که کار بر انتخاب کرد، در lbl نمايش داده شود، مینويسيم:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Private Sub cmd2_Click ( )
cdb.ShowOpen
lbl.Caption = cdb.FileName
End Sub
http://www.schoolnet.ir/_themes/fpg0039/line.gif
shirin71
08-06-2011, 07:26 PM
توابع msg box و Input Box
از تابع MsgBox برای ارسال يک پيغام به کاربر و يا مطرح نمودن يک پرسش و دريافت جواب مثبت يا منفی او به سؤال مطرح شده و از تابع InputBox برای دريافت يک عبارت از کاربر، استفاده میشود.
توابع مذکور را میتوان مانند دستور نوشت، يعنی نام يکی از آن دو را و با يک فاصله پارامترهای احتمالی آنها را نوشت. همچنين میتوان آنها را مانند يک Function به VB معرفی کرد. (يعنی اين توابع دارای مقدار بازگشتی باشند)که برای اين منظور بايد پارامترهای آنها را داخل پرانتز نوشت.
پنج پارامتر اول Input Box به ترتيب عبارتند از:
Prompt: که يک عبارت رشته ای را (و يا يک متغير رشته ای (String) را) بجای آن مینويسيم که اين عبارت همان پيغامی خواهد بود که در اجرای InputBox به کاربر نشان داده خواهد شد (مثلاً پيغام اينکه او بايد چه چيزی را وارد کند).
Title: که عنوان InputBox در TitleBarآن خواهد بود (به صورت عبارت رشتهای).
Default: که مقدار پيش فرض برای آن چيزی است که کاربر قرار است وارد نمايد.
XPos و YPos: که طول و عرض گوشه بالا و سمت چپ InputBox را در هنگام اجرای آن مشخص میکند.
که می توان هريک از آنها را مقداردهی نکرد و در اينصورت مقادير پيش فرض VB برای آنها در نظر گرفته خواهد شد.
به عنوان مثال اگر دستورات:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Dim s As String
s = InputBox (“Please enter your name” , “Title” , “Alireza”)
http://www.schoolnet.ir/_themes/fpg0039/line.gif
را در برنامه داشته باشيم در زمان اجرای اين دستورات شکل 12 را مشاهده خواهيم کرد:
http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb6_files/image002.jpg
شکل 12
مشاهده می کنيد که بطور پيش فرض مقدار “Alireza”در کادر مربوط قرار گرفته است که کاربر می تواند آن را تغيير دهد. در هر حال پس از تأييد اين کادر توسط کاربر، آنچه در کادر مذکور باشد به عنوان نتيجه در متغير رشته ای s ذخيره می شود و میتوان از آن در ادامه استفاده نمود.
اما سه پارامتر اول MsgBox نيز به قرار زيراند:
http://www.schoolnet.ir/_themes/fpg0039/dot.gifPrompt: که پيغامی است که در Message Box زمان اجرا به کاربر نمايش داده خواهد شد.
http://www.schoolnet.ir/_themes/fpg0039/dot.gifButton: که می توان دکمه های مورد نظر و علامت موردنظر برای Message Box را در آن تعيين نمود. برخی از مقادير مهمی که می توان در اين پارامتر قرار داد عبارتند از:
VBOKOnly : کادر مذکور فقط دارای دکمه OK خواهد بود.
VBOKCancel: کادر مذکور دارای دکمه های OK و Cancel خواهد بود.
VBYesNo: کادر مذکور دارای دکمه های Yes و No خواهد بود.
VBYesNoCancel: کادر مذکور دارای دکمه های Yes و No و Cancel خواهد بود.
VBAbortRetryIgnore: کادر مذکور دارای دکمه های Abort و Retry و Ignore خواهد بود.
VBRetryCancel: کادر مذکور دارای دکمه های Retry و Cancel خواهد بود.
VBMsgBoxRight: در کادر مذکور Title را راست چين میکند.
VBMsgBoxRtlReading: کادر مذکور را راست به چپ (Right to Left) میکند (و برای پيغام های فارسی مناسب است)
VBCritical: يکعلامت http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb6_files/image004.jpg در کنار کادر اضافه خواهد شد.
VBExclamation: يکعلامت http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb6_files/image006.jpg در کنار کادر اضافه خواهد شد.
VBInformation: يکعلامتhttp://www.schoolnet.ir/tutorial/vb/docs/Book2/vb6_files/image008.jpgدر کنار کادر اضافه خواهد شد.
VBQuestion: يکعلامت http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb6_files/image010.jpg در کنار کادر اضافه خواهد شد.
http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb6_files/image008.jpgنکته: می توان آنهايی را که با هم تداخلی ندارند با علامت + با هم ترکيب کرد. مثلاً اگر بخواهيم که هم دکمه های OKو Cancel بيايند و هم در کنار پيغام، علامت بيايد و هم Title راست چين شود، می توان در اين پارامتر چنين نوشت:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
VBOKCancel + VBInformation + VBMsgBoxRight
http://www.schoolnet.ir/_themes/fpg0039/line.gif
http://www.schoolnet.ir/_themes/fpg0039/dot.gifTitle: که می توان عبارتی که در TitleBar اين کادر می آيد را مشخص نمود.
به عنوان مثال اگر دستورات:
http://www.schoolnet.ir/_themes/fpg0039/line.gif
Dim Result As VbMsgBoxResult
Result = MsgBox (“Are you sure you want to exit?”,vbQuestion+vbYesNo, “Exit”)
IF Result = vbYes then Unload Me
http://www.schoolnet.ir/_themes/fpg0039/line.gif
را وارد کنيم، در اينصورت در زمان اجرای اين دستورات ابتدا شکل 13 به کاربر نمايش داده خواهد شد و در صورتی که کاربر به پيغام داده شده پاسخ Yes دهد، فرم فعال (که در VB با Me نمايش داده می شود)، Unload خواهد شد:
http://www.schoolnet.ir/tutorial/vb/docs/Book2/vb6_files/image012.jpg
شکل 13
توجه داريم که نتيجه تابع MsgBox از نوع داده vbMsgBoxResult می باشد و لذا ما در بالا متغير Result را از اين نوع داده تعريف کرديم. اين نوع داده می تواند يکی از مقادير vbAbort، vbCancel، vbIgnore، vbNo، vbOK، vbRetry و vbYes باشد.
vBulletin v4.2.5, Copyright ©2000-2025, Jelsoft Enterprises Ltd.