![]() |
|
|
#11 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
|
به عنوان اولين پروژه، قصد داريم فرمی داشته باشيم با دو دکمه Message و Exit که اگر در دکمه Message کليک شد، پيغامی نمايش داده شود و اگر دکمه Exit کليک شد از برنامه خارج شود(شکل3):
فقط کاربراني که ثبت شده اند و فعال شده اند مي توانند لينکها را ببينند[براي ثبت نام اينجا را کليک کنيد] ابتدا فرمی که بر روی صفحه نمايش باز است (فعلاً به نام 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 به شکل را دابل کليک می کنيم و يا با يک 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) از آن را به صورت زير باز می کند: ![]() End Sub ![]() دستوری که بايد در cmdExit_Click نوشته شود بسيار ساده است: ![]() End End Sub ![]() حال اگر به ترتيبی که در بالا ذکر شد، Event Procedure مربوط به رويداد click از دکمه Message را نيز باز می کنيم و آن را به صورت زير تغيير می دهيم: ![]() MsgBox “The first project was done successful” و و “Thanks” End Sub ![]() حال برنامه تان را اجرا کنيد و نتيجه کار را ببينيد (اجرای برنامه در 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 بر روی آن رخ می دهد: Initialize Load Activate Got focusکه زمانی که رويداد اول رخ می دهد، هنوز object های روی فرم ايجاد نشده اند و قابل دسترسی نيستند. اين object ها در load ساخته می شوند، اما هنوز فرم نمايش داده نشده است. وقتی فرم نمايش داده می شود، رويداد Activate و وقتیfocus به آن داده می شود، رويداد Got focus روی مي دهد. (منظور از گرفتن focus اينست که آن کنترل خاص که در اينجا فرم است، کانون تمام پيامها شود، مثلاً اگر کليدی زده شد به آن فرستاده شود و ...). 4-برای ذخيره کردن پروژه از منوی فايل و گزينه Save استفاده می شود که بايد تمام فرمها، ماژولها، ... و اصل پروژه را جداگانه ذخيره کرد. لذا اگر شما برنامه First Project راsave کنيد، يکبار نام فرم را save می کند (با پسوند.frm) و يکبار فايل پروژه را (با پسوند.VBP). نوشته: فرزاد farzad_kenko@yahoo.com |
|
|
|
|
|
#12 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
|
فرض کنيد بخواهيم فرمی داشته باشيم که دارای دو Text Box (که در VB برای عمليات دريافت اطلاعات از کاربر (DataEntrq) معمولاً از اين کنترل استفاده می شود) برای درجه سيلسيوس و درجه فارنهايت باشد و توسط يک دکمه (و در واقع با فشردن آن توسط کاربر) مقداری که در Text box مربوط به درجه سيلسيوس نوشته شده بود را به فارنهايت تبديل کند و نتيجه را در Text Box مربوط به آن درج نمايد. (توجه: اگر Cمقدار درجه برحسب سيلسيوس و Fمقدار درجه برحسب فارنهايت باشد، تبديل سيلسيوس به فارنهايت از فرمول F=9/5C+32 محاسبه می شود). شکل نهايی فرم را می توانيد در شکل 4 ببينيد.
فقط کاربراني که ثبت شده اند و فعال شده اند مي توانند لينکها را ببينند[براي ثبت نام اينجا را کليک کنيد] برای اين منظور، از جعبه ابزار (جعبه حاوی کنترلها) ، دو برچسب (Label) که در جعبه ابزار به شکل ديده می شود را بر روی فرم قرار می دهيم(برچسب(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 ها در جعبه ابزار به شکل ديده می شوند، معمولاً برای نمايش و دريافت اطلاعات به طور توأم به کار می رود (بر عکس 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 بايد به شکل زير شود: ![]() txtFahrenheit.Text = (9/5*txtCelsius.Text) +32 End Sub ![]() بنابراين، 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 نيز استفاده کنيم. نوشته:فرزاد farzad_kenko@yahoo.com |
|
|
|
|
|
#13 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
|
فرض کنيد بخواهيم مثال قبل را طوری تغيير دهيم که با نوشتن هر رقمی در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 چنين بنويسيم: ![]() txtFahrenheit = (Val (txtCelsius)*9/5) + 32 End Sub ![]() 1-اگر بر روی يک Text Box در Design Time دابل کليک کنيد، به طور پيش فرض، رويداد Change از آن را برای کدنويسی باز می کند. اگر می خواهيم Event Procedure رويدادهای ديگر را بياوريم، کافی است از Combo Box منوی باز شونده عمودی کرکره ای که يک فلش رو به پايين سمت راست خود برای باز شدن منو دارد) سمت راست بالای صفحه کدنويسی، يکی از Event Procedure ها را به دلخواه انتخاب کنيم. Combo Box سمت چپ آن هم نام تمام Object های استفاده شده در آن فرم خاص را دارد که هر کدام انتخاب باشد، در Combo Box سمت راست، Procedure های آن Object خاص را ليست خواهد کرد. در شکل 5 برخی از رويدادهای مربوط به txtCelsius را می بينيد. فقط کاربراني که ثبت شده اند و فعال شده اند مي توانند لينکها را ببينند[براي ثبت نام اينجا را کليک کنيد] 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 را به صورت زير تغيير دهيم: ![]() 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 ![]() نوشته:فرزاد farzad_kenko@yahoo.com |
|
|
|
|
|
#14 (permalink) |
|
برنامه نویس ویژوال بیسیک(مدیر افتخاری)
|
فرض کنيد بر روی فرم، يک Text Box به نام txtUserName قرار داده ايم و بخواهيم کاربر، هر حرفی را داخل آن نوشت، با حرف بزرگ انگليسی زده شود (يعنی اگر وارد کرد a، در Text Box درج شود A) در اين صورت کافی است برای رويداد KeyPress از آن بنويسيم: ![]() KeyAscii = ASC (Ucase (Chr (KeyAscii))) End Sub ![]() برخی مشخصه های 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 باشد، با زد |