سفارش تبلیغ
صبا ویژن
[ و ابن جریر طبرى در تاریخ خود از عبد الرحمن پسر ابى لیلى فقیه روایت کرده است ، و عبد الرحمن از آنان بود که با پسر اشعث براى جنگ با حجاج برون شد . عبد الرحمن در جمله سخنان خود در برانگیختن مردم به جهاد گفت : روزى که با مردم شام دیدار کردیم ، شنیدم على ( ع ) مى‏فرمود : ] اى مؤمنان آن که بیند ستمى مى‏رانند یا مردم را به منکرى مى‏خوانند و او به دل خود آن را نپسندد ، سالم مانده و گناه نورزیده ، و آن که آن را به زبان انکار کرد ، مزد یافت و از آن که به دل انکار کرد برتر است ، و آن که با شمشیر به انکار برخاست تا کلام خدا بلند و گفتار ستمگران پست گردد ، او کسى است که راه رستگارى را یافت و بر آن ایستاد ، و نور یقین در دلش تافت . [نهج البلاغه]

آموزش علوم رایانه

 
 

تغییری در وضعیت مثال قبل و استفاده از رویداد KeyUp

فرض کنید بخواهیم مثال قبل را طوری تغییر دهیم که با نوشتن هر رقمی در 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 رخ نمی دهد.)

 توجه داشته باشیم که KeyDownKeyUp) برای همه کلیدهای صفحه کلید رخ می دهد اما رویداد 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 چنین بنویسیم:

 

Private Sub txtCelsius_KeyUp (KeyCode As Integer, shift As Integer)

     txtFahrenheit = (Val (txtCelsius)*9/5) + 32

End Sub

 

ذکر چند نکته:

1-    اگر بر روی یک Text Box در Design Time دابل کلیک کنید، به طور پیش فرض، رویداد Change از آن را برای کدنویسی باز می کند. اگر می خواهیم Event Procedure رویدادهای دیگر را بیاوریم، کافی است از Combo Box منوی باز شونده عمودی کرکره ای که یک فلش رو به پایین سمت راست خود برای باز شدن منو دارد) سمت راست بالای صفحه کدنویسی، یکی از Event Procedure ها را به دلخواه انتخاب کنیم. Combo Box سمت چپ آن هم نام تمام های استفاده شده در آن فرم خاص را دارد که هر کدام انتخاب باشد، در Combo Box سمت راست، Procedure های آن خاص را لیست خواهد کرد. در شکل 5 برخی از رویدادهای مربوط به txtCelsius را می بینید.

 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 را به صورت زیر تغییر دهیم:

 

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

در اینصورت تابع On Error می گوید که وقتی به خطایی در ادامه برخوردی به خطی از Procedure که دارای برچسب xx (یک برچسب اختیاری) است برو (Goto xx) . اگر برنامه به این خط برود (یعنی وقتی خطایی رخ داد) ، بررسی می کند اگر شماره خطای رخ داده شده (Err یک همیشگی در VB است که مشخصه number از آن، شماره شماره خطای رخ داده را در خود نگهداری می کند) برابر B بود، بجای convert کردن، در txtFahrenheit بنویسیدcan’t convert  (امیدوارم نحوه بکارگیری دستورات شرطی (IF sentences) را بدانید). تنها نکته ای که هست اینکه اگر خطا رخ نداد و convert انجام شد، دیگر نباید به خط xx وارد شود و لذا از دستور Exit sub استفاده کردع ایم. این دستور در هر جایی از یک sub اجرا شود، بلافاصله از آن خارج می شود و دستورات دیگر را اجرا نمی کند.







بازدیدهای امروز: 0  بازدید

بازدیدهای دیروز:0  بازدید

مجموع بازدیدها: 5794  بازدید


» فهرست موضوعی یادداشت ها «
» اشتراک در خبرنامه «