طريقة محاكاة KeyASCII في Keypress
كنا زمان مع الvb6 عندما نريد معرفة الحرف المضغوط نستخدم الحدث Keypress ,, ونستخدم الخاصية keyASCII والتي تمرر كوسيط ,,
والآن في الفي بي دوت نت ,, لاتمرر هذه الخاصية كوسيط وإنما هنالك طرق أخرى ,, من بينها KeyChar و KeyCode ,,
والأولى عاملة مع الحدث Keypress ,, وهذه الخاصية هي تابعة e الوسيط الثاني في الأحداث وهو من نوع EventArgs أي "Event Arguments"
وهذه الخاصية - اقصد KeyChar - تحتفظ بالحروف والأرقام والمفاتيح الأخرى مثل [Enter] , [Alt] وغيرها ,, ومثال لها
Private Sub textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textbox1.KeyPress
If e.KeyChar = Microsoft.VisualBasic.ChrW(13) Then
MsgBox("you press Enter!")
End If
End Subويمكن تحويل كل charecter إلى الASCIICode التابع له بواسطة الدالة ASC ,, وبتطبيق ذلك بتغيير طفيف في المثال السابق نجد أن مايلي هو نفس ماسبق ,,,
Private Sub textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textbox1.KeyPress
If Asc(e.KeyChar) = 13 Then
MsgBox("you press Enter!")
End If
End Subولإن الدالة KeyChar هي دالة للقراءة فقط "ReadOnly" ولايمكننا إسناد القيم إليها مثل الKeyASCII ,,
فعندما يراد إنهاء عمل حدث PressKey فإننا كنا في vb6 كنا نسند القيمة صفر إلى الوسيط KeyASCII ,,
ولكن في في بي دوت نت الطريقة تختلف ,, لأن الحدث ينتهي عند إسناد القيمة True ل e.Handled
وإذا نريد أن نحاكي الطريقة القديمة نفسها ,, ببعض الحرافة يمكننا ذلك ,, نعرف متغير من نوع Short ونهيئه بالقيمة التالية
Asc(e.KeyChar)
ثم نرى إن كان هذا المتغير قد أخذ القيمة صفر ,, مثلاً في الكود تحقق شرط واسند له القيمة صفر ,, نسند القيمة True لe.Handled
كما في المثال التالي:
Private Sub Text1_KeyPress(ByVal eventSender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Dim KeyAscii As Short = Asc(eventArgs.KeyChar) KeyAscii = MyValue KeyAscii = 0 If KeyAscii = 0 Then eventArgs.Handled = True End If End Sub
اتمنى أني وفقت في ماقدمت ,,
وآخر دعوانا أن الحمدلله رب العالمين ,,, ;)
أختكم المؤمنة ,,,
