Hỏi về phương thức Set Focus

Liên hệ QC

hoangdanh282vn

Nguyễn Cảnh Hoàng Danh
Thành viên danh dự
Tham gia
21/12/07
Bài viết
1,900
Được thích
5,277
Nghề nghiệp
Kinh doanh các mặt hàng văn phòng phẩm
Mình có 1 UserForm nhập liệu. Trên đó có 2 textbox
Textbox1 : Nhập ngày tháng
Textbox2 : Nhập số chứng từ

Mình muốn là khi nhập liệu ngày tháng vào textbox1 xong, bấm enter hay tab thì sẽ kiểm tra xem dữ liệu ngày trên textbox1 có hợp lệ không. Nếu đúng thì sẽ nhảy đến textbox2, nếu sai thì sẽ hiện thông báo và con trỏ vẫn ở tại textbox1 để nhập lại dữ liệu.

Mình đã thử vài sự kiện cho textbox1 như Exit, BeforeApdate, AfterApdate.. kết hợp với Set focus nhưng vẫn không được. Dù dữ liệu đúng hay sai thì khi tab xong, con trỏ vẫn luôn nhảy đến textbox2.

Mong được sự giúp đỡ của các bạn.
Cảm ơn!
 

File đính kèm

  • Hoi ve Set focus.xls
    30.5 KB · Đọc: 80
Các bạn cho mình hỏi thêm vần đề di chuyển giữa các textbox :

Mình có 1 form, trên đó có chứa 6 textbox được sắp xếp theo thứ tự từ trên xuống dưới.

Nếu mình dùng phím tab hay enter để di chuyển con trỏ từ trên xuống dưới thì ok. Nhưng khi mình dùng phím mũi tên xuống để di chuyển thì nó đi qua textbox1, textbox2, textbox4, textbox6. 2 textbox 3 và 5 không được chọn. Khi dùng phím lên cũng vậy.

Các bạn chỉ cho mình về lỗi này và thuộc tính nào qui định cho việc di chuyển này.

Mình xin cảm ơn các bạn!
 
Upvote 0
Bạn đặt thứ tự trong thuộc tính (Properties) TabIndex và TabStop=True
 
Upvote 0
Các bạn cho mình hỏi thêm vần đề di chuyển giữa các textbox :

Mình có 1 form, trên đó có chứa 6 textbox được sắp xếp theo thứ tự từ trên xuống dưới.

Nếu mình dùng phím tab hay enter để di chuyển con trỏ từ trên xuống dưới thì ok. Nhưng khi mình dùng phím mũi tên xuống để di chuyển thì nó đi qua textbox1, textbox2, textbox4, textbox6. 2 textbox 3 và 5 không được chọn. Khi dùng phím lên cũng vậy.

Các bạn chỉ cho mình về lỗi này và thuộc tính nào qui định cho việc di chuyển này.

Mình xin cảm ơn các bạn!

Chào Danh,
Em dùng sự kiện KeyDown để di chuyển con trỏ
Mã:
Private Sub txtMaterial_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        [COLOR="Blue"][B]txtVerifier[/B][/COLOR].SetFocus 
    End If
End Sub

Ở trên txtMaterial Textbox hiện tại đang có focus. Còn Textbox txtVerifier là Textbox em muốn dùng phím mủi tên để di chuyển.
Em chú ý cho cái hằng vbKeyReturn, em phải thay đổi theo yêu cầu của em.

Lê Văn Duyệt
 
Upvote 0
Mình có thêm câu hỏi này, nhờ các bạn giải đáp giúp.

Mình có 1 form trong đó có 2 Combobox đã có sẵn danh sách trong list.

Khi mình dùng phím mũi tên lên để di chuyển focus từ ComB2 đến ComB1 thì trước khi con trỏ dời đi, tại ComB2 nó sẽ trả về giá trị đầu tiên có trong list danh sách. Như thế nó đã làm thay đổi giá trị ban đầu của ComB2 mặc dù ta không muốn thế.

Phải dùng thuộc tính hay sự kiện gì để khi di chuyển focus, giá trị của ComB2 vẫn không thay đổi.

Mình xin cám ơn
 
Upvote 0
Khi mình dùng phím mũi tên lên để di chuyển focus từ ComB2 đến ComB1
Tại sao lại dùng phím mũi tên lên để di chuyển từ control này đến control khác?
Thông thường chúng ta nên dùng phím Enter hoặc phím Tab (hoặc shift + Tab: để di chuyển ngược lại) để di chuyển.

Nếu em đã dùng hai phím anh đã đề cập ở trên để di chuyển giữa các control thì sau khi dùng phím mũi tên (lên hoặc xuống) để chọn mục trong combobox em chỉ việc Enter hoặc Tab là xong thôi.
Mã:
Private Sub cbb1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        cbb2.SetFocus
    End If
End Sub

Lê Văn Duyệt
 
Lần chỉnh sửa cuối:
Upvote 0
Tại sao lại dùng phím mũi tên lên để di chuyển từ control này đến control khác?
Thông thường chúng ta nên dùng phím Enter hoặc phím Tab (hoặc shift + Tab: để di chuyển ngược lại) để di chuyển.

Nếu em đã dùng hai phím anh đã đề cập ở trên để di chuyển giữa các control thì sau khi dùng phím mũi tên (lên hoặc xuống) để chọn mục trong combobox em chỉ việc Enter hoặc Tab là xong thôi.
Mã:
Private Sub cbb1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        cbb2.SetFocus
    End If
End Sub

Lê Văn Duyệt

Cám ơn anh Duyệt đã giúp đỡ.

Vì em có 1 form nhập phiếu xuất kho, có hơn 10 Combobox để chọn mã SP và có nhiều Textbox. Phím Tab hay Enter chỉ di chuyển qua lại giữa các Control từ trên xuống dưới, từ trái qua phải hoặc ngược lại. Giả sử các Combo nó đều nằm bên trái từ trên xuống dưới, như vậy thì muốn di chuyển từ Combo thứ 1 đến Combo thứ 5 thì ta phải qua một loạt các Control khác không cần thiết.

Nếu ta đang ở Combo thứ 5, ta phát hiện thấy Combo1 bị sai, ta muốn di chuyển từ ComBo5 đến Combo1 để sửa. Nếu dùng Tab thì quá lâu, dùng chuột thì không thuận tiện, dùng phím mũi tên lên di chuyển ngược lên thì nhanh nhưng nó sẽ làm thay đổi giá trị của Combo5 đến 4.

Ý em muốn là làm sao khi di chuyển như vậy mà các Combo trên không bị thay đổi giá trị.
 
Upvote 0
Nếu ta đang ở Combo thứ 5, ta phát hiện thấy Combo1 bị sai, ta muốn di chuyển từ ComBo5 đến Combo1 để sửa. Nếu dùng Tab thì quá lâu, dùng chuột thì không thuận tiện, dùng phím mũi tên lên di chuyển ngược lên thì nhanh nhưng nó sẽ làm thay đổi giá trị của Combo5 đến 4.

Ý em muốn là làm sao khi di chuyển như vậy mà các Combo trên không bị thay đổi giá trị.

Vậy bạn hãy tạo phím nóng để gọi thủ tục di chuyển đến control đó.

Trước mỗi combobox tạo một label, và gán thuộc tính Accelerator cho mỗi label. Để khi bạn nhấn tổ hợp phím Alt + ký tự Accelerator thì con trỏ sẽ di chuyển đến control theo ý muốn của bạn.
Xin xem tập tin đính kèm.

Vbavn
 

File đính kèm

  • Test_PhimNong.xls
    31 KB · Đọc: 26
Upvote 0
Các bạn cho mình hỏi thêm vần đề di chuyển giữa các textbox :

Mình có 1 form, trên đó có chứa 6 textbox được sắp xếp theo thứ tự từ trên xuống dưới.

Nếu mình dùng phím tab hay enter để di chuyển con trỏ từ trên xuống dưới thì ok. Nhưng khi mình dùng phím mũi tên xuống để di chuyển thì nó đi qua textbox1, textbox2, textbox4, textbox6. 2 textbox 3 và 5 không được chọn. Khi dùng phím lên cũng vậy.

Các bạn chỉ cho mình về lỗi này và thuộc tính nào qui định cho việc di chuyển này.

Mình xin cảm ơn các bạn!

Đó là do vị trí đặt textbox của bạn. Các border textbox của bạn đang đè lên nhau, chỉ cần đặt vị trí khác đi là ok.
 
Upvote 0
Cám ơn anh Duyệt đã giúp đỡ.

Vì em có 1 form nhập phiếu xuất kho, có hơn 10 Combobox để chọn mã SP và có nhiều Textbox. Phím Tab hay Enter chỉ di chuyển qua lại giữa các Control từ trên xuống dưới, từ trái qua phải hoặc ngược lại. Giả sử các Combo nó đều nằm bên trái từ trên xuống dưới, như vậy thì muốn di chuyển từ Combo thứ 1 đến Combo thứ 5 thì ta phải qua một loạt các Control khác không cần thiết.

Nếu ta đang ở Combo thứ 5, ta phát hiện thấy Combo1 bị sai, ta muốn di chuyển từ ComBo5 đến Combo1 để sửa. Nếu dùng Tab thì quá lâu, dùng chuột thì không thuận tiện, dùng phím mũi tên lên di chuyển ngược lên thì nhanh nhưng nó sẽ làm thay đổi giá trị của Combo5 đến 4.

Ý em muốn là làm sao khi di chuyển như vậy mà các Combo trên không bị thay đổi giá trị.

Mình dùng đoạn Code sau để giải quyết vấn đề của bạn

Private Sub PAKD2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Error Resume Next
Select Case KeyCode
Case 40: PAKD3.SetFocus 'an phim xuong
Case 38: PAKD1.SetFocus 'an phim len
End Select
End Sub


Tuy nhiên khi đó tính năng Drop - Down list của Combobox lại mất tác dụng (Không chọn được danh sách sổ xuống khi ấn F4 hoặc Alt+Downkey)

So sánh giữa 2 cột PAKD và Mặt hàng trong VD kèm theo sẽ thấy rõ. Cột Mặt hàng dùng phím Shift và Ctrl để di chuyển lên xuống.

Vấn đề cần giải quyết là làm sao vẫn dùng phím Lên, xuống để di chuyển giữa các Combobox và định nghĩa phím điều khiển tính năng Drop - Down list của Combobox.
Vì vậy rất mong các cao tủ trợ giúp.
 

File đính kèm

  • VFCSDOC.xls
    41.5 KB · Đọc: 10
Upvote 0
Bạn sửa 1 chút:

Mã:
Private Sub PAKD1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Error Resume Next
If Shift =0 Then
Select Case KeyCode
Case 40: KeyCode = 0: PAKD2.SetFocus 'an phim xuong
Case 38: KeyCode = 0: PAKD5.SetFocus 'an phim len
End Select
End If
End Sub

Muốn di chuyển trên List bằng fím mũi tên phải giữ Shift hay Ctrl
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn sửa 1 chút:

Mã:
Private Sub PAKD1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
On Error Resume Next
If Shift =0 Then
Select Case KeyCode
Case 40: KeyCode = 0: PAKD2.SetFocus 'an phim xuong
Case 38: KeyCode = 0: PAKD5.SetFocus 'an phim len
End Select
End If
End Sub

Muốn di chuyển trên List bằng fím mũi tên phải giữ Shift hay Ctrl

Như vậy là đáp ứng được yêu cầu. Rất cảm ơn Bác đã trợ giúp!
 
Upvote 0
Web KT
Back
Top Bottom