Sự kiện keydown trong texbox (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

khuongvietphong

Be all you can be !
Tham gia
6/7/14
Bài viết
2,069
Được thích
1,444
Nghề nghiệp
Ăn không ngồi rồi ^.^
Chao mọi người, em có vấn đề này mong nhận được sự trợ giúp của các anh chị
Form của em gồm 2 TextBox. Em muốn khi TextBox 1 chưa nhập gì cả thì khi nhấn Enter sẽ không nhảy xuống TextBox2 mà còn chỏ vẫn Setfocus ở TextBox 1. Em có viết sự kiện KeyDown cho T1 như sau:
PHP:
 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode = 13 Then
    If TextBox1 = "" Then
      TextBox1.SetFocus
    Else
     TextBox2.SetFocus
    End If
End If
End Sub

Tuy nhiên Code vẫn chưa đạt được điều mong muốn. Qua tìm hiểu em biết được rằng phải bổ sung thêm câu lệnh này: KeyCode = 0 vào giữa dòng 2 và 3 thì Code mới chạy đúng. Tuy nhiên em chưa hiểu tại sao lại phải làm vậy, mong các anh chị giải thích dùm em nha.
 
Lần chỉnh sửa cuối:
Chao mọi người, em có vấn đề này mong nhận được sự trợ giúp của các anh chị
Form của em gồm 2 TextBox. Em muốn khi TextBox 1 chưa nhập gì cả thì khi nhấn Enter sẽ không nhảy xuống TextBox2 mà còn chỏ vẫn Setfocus ở TextBox 1. Em có viết sự kiện KeyDown cho T1 như sau:
PHP:
 Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
 If KeyCode = 13 Then
    If TextBox1 = "" Then
      TextBox1.SetFocus
    Else
     TextBox2.SetFocus
    End If
End If
End Sub

Tuy nhiên Code vẫn chưa đạt được điều mong muốn. Qua tìm hiểu em biết được rằng phải bổ sung thêm câu lệnh này: KeyCode = 0 vào giữa dòng 2 và 3 thì Code mới chạy đúng. Tuy nhiên em chưa hiểu tại sao lại phải làm vậy, mong các anh chị giải thích dùm em nha.

Với yêu cầu này, thì sự kiện Exit là phù hợp nhất:

Mã:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = "" Then Cancel = True
End Sub
 
Upvote 0
Với yêu cầu này, thì sự kiện Exit là phù hợp nhất:

Mã:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Text = "" Then Cancel = True
End Sub

Cảm ơn anh đã giới thiệu 1 cách khác. Nếu anh đã có câu trả lời cho #1 rồi thì rất mong nhận được sự giải thích từ anh.
 
Upvote 0
Vẫn muốn dùng KeyCode thì dùng sự kiện KeyDown như thế này:

Mã:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If TextBox1.Text = "" And (KeyCode = 13 Or KeyCode = 9) Then
        KeyCode = 0
    End If
End Sub

Mỗi phím có một mã code gọi là KeyCode, với KeyCode = 0 tương đương với KeyCode = vbKeyCancel tức phím CANCEL (trong bàn phím không thấy phím này), nó có tác dụng hủy tất cả các thao tác trên phím mà ta gõ vào.
 
Upvote 0
Vẫn muốn dùng KeyCode thì dùng sự kiện KeyDown như thế này:

Mã:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If TextBox1.Text = "" And (KeyCode = 13 Or KeyCode = 9) Then
        KeyCode = 0
    End If
End Sub

Mỗi phím có một mã code gọi là KeyCode, với KeyCode = 0 tương đương với KeyCode = vbKeyCancel tức phím CANCEL (trong bàn phím không thấy phím này), nó có tác dụng hủy tất cả các thao tác trên phím mà ta gõ vào.

Cái này thì em hiểu nhưng mà ta đã gõ gì vào trong nó đâu mà cần hủy ạ
 
Upvote 0
Cái này thì em hiểu nhưng mà ta đã gõ gì vào trong nó đâu mà cần hủy ạ
Các sự kiện thường xảy ra trước hoặc sau khi một lệnh được thực hiện, như thế với sự kiện KeyDown (xảy ra trước, tức phím đang bị nhấn xuống) và KeyUp (xảy ra sau, tức phím đang được bung lên sau khi nhấn xuống) đối với lệnh gõ.

Khi ta gõ Enter, tức KeyCode là 13, được gọi, nếu ta sử dụng sự kiện để kiểm tra một điều kiện gì đó mà không thỏa thì ta hủy/ thay thế KeyCode 13 đó bằng một KeyCode "rỗng", vì thế lệnh gõ phím bị vô hiệu.
 
Upvote 0
Thủ tục sự kiện không hủy tác dụng của phím bấm (trừ khi ta làm việc này trong thủ tục bằng cách gán keycode=0) mà khi bấm 1 phím, sự kiện keydown thực hiện xong sẽ trả quyền điều khiển về vba để làm nhiệm vụ tiếp theo, có thể là sự kiện keypress, keyup hay thực hiện tác dụng của phím bấm. Nếu keydown mặc đinh hủy luôn tác dụng của phím thì ta không thể gõ ký tự gì vào textbox được cả.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom