KeyDown , KeyPress , KeyUp

           เนื่องจากผมเห็นว่า event ทั้งสามนี้คล้ายๆกัน ผมจึงขอเอาไว้รวมกันน๊ะครับ ผมขอยกตัวอย่าง KeyDown ก่อนน๊ะครับ

Butt1.gif (190 bytes) KeyDown

           นำเอา image box มาวางบน form ก่อน 1 อัน แล้วก็เขียนโคดตามนี้

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   Image1.Left = Image1.Left + 100
End Sub

           จะเห็นว่ารูปภาพขยับทุกครั้งที่เรากดปุ่ม key ใดๆ ก็ตาม ดังนั้นเราก็ควรตรวจสอบด้วยว่าปุ่มที่เรากดนั้น คืออะไรแล้วจะให้ทำอะไร เช่น

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode = vbKeyRight Then
      Image1.Left = Image1.Left + 100
   ElseIf KeyCode = vbKeyLeft Then
      Image1.Left = Image1.Left - 100
   ElseIf KeyCode = vbKeyUp Then
      Image1.Top = Image1.Top - 100
   ElseIf KeyCode = vbKeyDown Then
      Image1.Top = Image1.Top + 100
   End If
End Sub

           จากตัวอย่างข้างบนจะเห็นว่าไม่มีปัญหาใดๆ เพราะมี object เพียงตัวเดียวอยู่บน form คุณลองเอา object อะไรก็ได้มาวางดูสิ เช่น button หรือ picture box โปรแกรมจะไม่สามารถทำงานได้ทันที วิธีแก้ปัญหาก็ลองเอารูปภาพนั้นเข้าไปไว้ใน picture box ดูก็จะสามารถทำงานได้ แต่ถ้ามี object อื่นอีก หลายตัวก็คงต้องใช้ event setfocus ช่วย หรือไม่ก็ใช้เม้าท์คลิกไปที่ picture box ก่อนแล้วจึงจะทำ งานได้(จะมีปัญหาเมื่อ สถานะพร้อมไปอยู่ที่ object บางตัว เช่น text box) แล้วเราจึงย้ายโคดมาไว้ที่นี่ แทน

Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode = vbKeyRight Then
      Image1.Left = Image1.Left + 100
   ElseIf KeyCode = vbKeyLeft Then
      Image1.Left = Image1.Left - 100
   ElseIf KeyCode = vbKeyUp Then
      Image1.Top = Image1.Top - 100
   ElseIf KeyCode = vbKeyDown Then
      Image1.Top = Image1.Top + 100
   End If
End Sub

           และ shift จะหมายถึงว่ามีการกดปุ่ม shift หรือ control ด้วยหรือเปล่า โดย 1 คือ shift และ 2 คือ control

           ส่วน KeyPress ก็คล้ายกัน เพียงแต่ว่าจะใช้ได้แต่เฉพาะ ปุ่มพวกตัวอักษรเท่านั้น ปุ่มพวก ลูกศร ขึ้นลง ซ้ายขวา จะใช้ไม่ได้

Butt1.gif (190 bytes) KeyUp

           อันนี้ก็เหมือนกัน แต่จะเกิดขึ้นเมื่อปล่อยปุ่มไปแล้วเท่านั้น ก็ลองทำเหมือนเดิม แค่เปลี่ยนเพียงเล็กน้อย

Private Sub Picture1_KeyUp(KeyCode As Integer, Shift As Integer)
   If KeyCode = vbKeyRight Then
      Image1.Left = Image1.Left + 100
   ElseIf KeyCode = vbKeyLeft Then
      Image1.Left = Image1.Left - 100
   ElseIf KeyCode = vbKeyUp Then
      Image1.Top = Image1.Top - 100
   ElseIf KeyCode = vbKeyDown Then
      Image1.Top = Image1.Top + 100
   End If
End Sub

           จะเห็นว่าภาพจะขยับเมื่อปล่อยปุ่มเท่านั้น

www.oocities.org/xwinggames

by

xwing@thaimail.com