منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : درس- طريقة محاكاة KeyASCII في Keypress
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
كاتب الموضوع : المؤمنة

الدرس: طريقة محاكاة KeyASCII في Keypress .. تقييمه: للمبتدئين ...
إعداد: فرحناز سجّاد حسين فاضل
النسخة: 2003
____________________________________________

كنا زمان مع ال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

اتمنى أني توفقت في إيصال المعلومة ...

تحياتي ...
كاتب المشاركة : مشكور

شكراً على الدرس القيم والجميل ... ولكن ماهو الكود المتعلق بإلغاء استخدام المسافة في مربع نص !
كاتب المشاركة : المؤمنة

أولاً عذراً على التأخر ..
وإجابة على سؤالك جرب الكود التالي ...



كود :
Private Sub textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textbox1.KeyPress
If Asc(e.KeyChar) = 32 Then
Textbox1.Text = Textbox1.Text + chr(8)
End If
End Sub