Vấn đề SetFocus

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
Tôi có 1 combobox để nhập tên Chủ hàng và 1 textbox để nhập bill. Làm sao khi tôi nhập xong tên Chủ hàng (có sẳn hoặc chỉnh sửa hay thêm mới), sau khi tôi bấm Enter hay Tab hoặc mũi tên chĩa xuống thì nó nhảy xuống Textbox, nhưng nó chỉ tô khối lên ký tự cuối cùng của giá trị có trong textbox thôi mà không tô khối cả nội dung của Textbox, tôi phải làm sao đây. Bởi vì mỗi lần thao tác trên chuột mỗi lần mất thời gian.

Xin được chỉ dạy. Cảm ơn rất nhiều!
 

File đính kèm

Tôi có 1 combobox để nhập tên Chủ hàng và 1 textbox để nhập bill. Làm sao khi tôi nhập xong tên Chủ hàng (có sẳn hoặc chỉnh sửa hay thêm mới), sau khi tôi bấm Enter hay Tab hoặc mũi tên chĩa xuống thì nó nhảy xuống Textbox, nhưng nó chỉ tô khối lên ký tự cuối cùng của giá trị có trong textbox thôi mà không tô khối cả nội dung của Textbox, tôi phải làm sao đây. Bởi vì mỗi lần thao tác trên chuột mỗi lần mất thời gian.

Xin được chỉ dạy. Cảm ơn rất nhiều!
Anh thử dùng code sau nhe:
Mã:
Private Sub ComboBox1_Change()
TextBox1.SetFocus
TextBox1.SelStart = Len(TextBox1.Text) - 1
End Sub
 
Upvote 0
Uả! Sao kỳ vậy ta? file của minhthien321 tôi test trên máy tôi bình thường, nghĩa là sao khi Enter hoặc Tab thì nó Set Focus đồng thời tô đen toàn bộ text trên TextBox luôn!
 
Upvote 0
Code của Dom không ổn rồi, khi mở Combo mới lượt tìm nó đã nhảy rồi. Cái này phải đặt vào KeyDown
Còn việc chọn thì ta dùng sự kiện của chính Textbox chủ động hơn. Bạn xem ví dụ sau (Lưu ý nếu đảo trật tự câu lệnh là có ảnh hưởng đấy)

PHP:
Private Sub TextBox2_Enter()
Me.TextBox2.SelStart = 0
Me.TextBox2.SelLength = Len(Me.TextBox2)
End Sub

To Ndu: Nếu Ndu chuyển bằng phím Arrow nó có khác biệt đấy.
 
Upvote 0
Sealan làm vậy cũng chưa đúng ý của chủ topic. Phải thế này cơ:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = Me.TextBox1.TextLength - 1
Me.TextBox1.SelLength = Me.TextBox1.TextLength
Else
KeyCode = 0
End If
End Sub
Keycode của nút {tab} là bao nhiêu thì thì thêm mệnh đề sau [OR].
 
Upvote 0
Uả! Sao kỳ vậy ta? file của minhthien321 tôi test trên máy tôi bình thường, nghĩa là sao khi Enter hoặc Tab thì nó Set Focus đồng thời tô đen toàn bộ text trên TextBox luôn!

Cái em muốn là không được bình thường Thầy ơi.
Sau khi Enter hoặc Tab (bỏ cái vụ mũi tên chĩa xuống đi) thì như File của em, nó chỉ chọn tại Textbox1 ở ký tự cuối là số 1 mà thôi (bill-01).

Với thuộc tính Change thì được nhưng lại không chỉnh sửa trên combobox được, Keydown càng không thể. Nên bí quá em mới hỏi các Thầy, BeforeUpdate em thấy cũng không xong!
 
Lần chỉnh sửa cuối:
Upvote 0
À há, hình như nhờ bài của anh manhhung12 mà mình làm gần được rồi! Nhưng còn thiếu keycode của phím Tab không biết là mấy hả các Thầy?

Cám ơn mọi người rất nhiều!

PHP:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  On Error Resume Next
  If KeyCode = 13 Then
    TextBox1.SetFocus: TextBox1.SelStart = Len(TextBox1) - 1: TextBox1.SelLength = 1
  End If
End Sub

Hic hic, mình tìm ra được Keycode của Tab rồi (9) thế nhưng khi áp dụng, nó xóa mất tiêu số 1 đồng thời nhảy ra 1 khoảng Tab, ai biết cách khắc phục làm ơn hướng dẫn dùm mình ạ.

Cảm ơn rất nhiều!
 
Lần chỉnh sửa cuối:
Upvote 0
À há, hình như nhờ bài của anh manhhung12 mà mình làm gần được rồi! Nhưng còn thiếu keycode của phím Tab không biết là mấy hả các Thầy?

Cám ơn mọi người rất nhiều!

PHP:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  On Error Resume Next
  If KeyCode = 13 Then
    TextBox1.SetFocus: TextBox1.SelStart = Len(TextBox1) - 1: TextBox1.SelLength = 1
  End If
End Sub

Hic hic, mình tìm ra được Keycode của Tab rồi (9) thế nhưng khi áp dụng, nó xóa mất tiêu số 1 đồng thời nhảy ra 1 khoảng Tab, ai biết cách khắc phục làm ơn hướng dẫn dùm mình ạ.

Cảm ơn rất nhiều!


Chưa hiểu ý chức năng Tab của Tác giả?
 
Upvote 0
Cám ơn bạn, nó lại gặp rắc rối với cái Tab này đó chứ! nó xóa đi ký tự cuối cùng và tạo một khoảng tab mới ghê! Chưa biết khắc phục sao nè!
Sửa lại như thế này xem sao
PHP:
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  On Error Resume Next
  If KeyCode = 9 Then
    TextBox1.SelStart = Len(TextBox1) - 1: TextBox1.SelLength = 1
  End If
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mã:
Private Sub TextBox1_Enter()
    TextBox1.SelStart = Len(TextBox1) - 1
    TextBox1.SelLength = 1
End Sub

Đặt Properties EnterFieldBehavior của TextBox1 = 1 là OK
 
Upvote 0
Minhthien321 nói rõ giùm:
Khi nhận Focus thì Textbox cần chọn toàn bộ ký tự đã có hay chỉ chọn ký tự cuối cùng? Mình đọc bài 1 và các hướng dẫn thấy mâu thuẫn quá?

Code của ManhHung cần sửa lại 1 chút (Chính vì vấn đề này mà MinhThien rắc rối với phím Tab)

PHP:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Or KeyCode = 40 Then
KeyCode = 0 '-Xoá bỏ tác vụ nhấn phím và giành quyền điều khiển bằng code chỉ riêng 3 phím trên
Me.TextBox1.SetFocus
Me.TextBox1.SelStart = Me.TextBox1.TextLength - 1
Me.TextBox1.SelLength = Me.TextBox1.TextLength
End If
End Sub
Đoạn này làm combo hết cách gõ bất kỳ phím nào ngoài phím Enter nên bỏ

PHP:
Else
        KeyCode = 0
    End If
 
Lần chỉnh sửa cuối:
Upvote 0
Minhthien321 nói rõ giùm:
Khi nhận Focus thì Textbox cần chọn toàn bộ ký tự đã có hay chỉ chọn ký tự cuối cùng? Mình đọc bài 1 và các hướng dẫn thấy mâu thuẫn quá?

Code của ManhHung cần sửa lại 1 chút (Chính vì vấn đề này mà MinhThien rắc rối với phím Tab)


Xin cảm ơn các Thầy các Anh. Khi Focus, mình chỉ chọn ký tự cuối cùng của chuỗi ở Textbox.
Ý của mình là như vầy, sau khi chọn xong (hoặc nhập hoặc chỉnh xong) ở Combobox, mình Enter nó sẽ chọn ký tự cuối cùng của chuỗi ở Textbox (mình chỉ thường xuyên sửa số cuối của bill thôi vì thường là phần đầu được giữ nguyên).
Enter thì không nói rồi, nhưng khi Tab (nhấn phím tab thì tab index ở đâu thì nó Focus ở vị trí đó), nhưng với keycode = 9 thì nó xóa ký tự cuối của mình, lại chọn 1 khoảng trắng ở đó, nên mình nghĩ mãi không ra tại sao. Trong khi nếu tab bình thường không có code thì nó chỉ đặt con trỏ tại tab index thôi chứ đâu có chuyện nó tạo một khoảng trắng tab như vậy!
À, mà tab cũng ít sử dụng, nếu thấy yêu cầu kỳ cục quá các Thầy bỏ qua cho, em làm theo kiểu Enter là được rồi ạ.

CẢM ƠN RẤT NHIỀU!
 
Upvote 0
Xin cảm ơn các Thầy các Anh. Khi Focus, mình chỉ chọn ký tự cuối cùng của chuỗi ở Textbox.
Ý của mình là như vầy, sau khi chọn xong (hoặc nhập hoặc chỉnh xong) ở Combobox, mình Enter nó sẽ chọn ký tự cuối cùng của chuỗi ở Textbox (mình chỉ thường xuyên sửa số cuối của bill thôi vì thường là phần đầu được giữ nguyên).
Enter thì không nói rồi, nhưng khi Tab (nhấn phím tab thì tab index ở đâu thì nó Focus ở vị trí đó), nhưng với keycode = 9 thì nó xóa ký tự cuối của mình, lại chọn 1 khoảng trắng ở đó, nên mình nghĩ mãi không ra tại sao. Trong khi nếu tab bình thường không có code thì nó chỉ đặt con trỏ tại tab index thôi chứ đâu có chuyện nó tạo một khoảng trắng tab như vậy!
À, mà tab cũng ít sử dụng, nếu thấy yêu cầu kỳ cục quá các Thầy bỏ qua cho, em làm theo kiểu Enter là được rồi ạ.

CẢM ƠN RẤT NHIỀU!
Ở bài 11 của huuthang , bạn chỉ thêm or keycode = 13 lúc đó bạn enter hay tab đều ok cả mà
 
Upvote 0
Như vậy cách chọn các bạn hướng dẫn vậy đã chuẩn rồi.
Nhưng mình tham gia là sau If KeyCode=13 Or KeyCode=9 Or KeyCode=40 then thì việc đầu tiên trước các câu lệnh khác là nên có KeyCode=0 để xoá bỏ mã các phím này, nó không thêm hay thay thế các ký tự không nhìn thấy vào chuỗi kết quả sẽ ảnh hưởng đến việc lọc hay kết xuất dữ liệu sau này
 
Upvote 0
chọn ký tự cuối cùng của chuỗi ở Textbox (mình chỉ thường xuyên sửa số cuối của bill thôi vì thường là phần đầu được giữ nguyên).
Enter thì không nói rồi, nhưng khi Tab (nhấn phím tab thì tab index ở đâu thì nó Focus ở vị trí đó), nhưng với keycode = 9 thì nó xóa ký tự cuối của mình, lại chọn 1 khoảng trắng ở đó, nên mình nghĩ mãi không ra tại sao. Trong khi nếu tab bình thường không có code thì nó chỉ đặt con trỏ tại tab index thôi chứ đâu có chuyện nó tạo một khoảng trắng tab như vậy!
À, mà tab cũng ít sử dụng, nếu thấy yêu cầu kỳ cục quá các Thầy bỏ qua cho, em làm theo kiểu Enter là được rồi ạ.
CẢM ƠN RẤT NHIỀU!
À tôi đã hiểu. Nói như Sealan là đúng.
Phải để câu lệnh keycode = 0 trước các câu lệnh trong <if...then...end if> vì nếu không nó sẽ thêm vào 1 khoảng trắng sau chuỗi ký tự trong textbox1.
Ha ha
 
Lần chỉnh sửa cuối:
Upvote 0
Nhờ các Thầy, các Anh hướng dẫn nên mình đã rút được code đã đúng như yêu cầu của mình rồi! Cám ơn rất nhiều!

PHP:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
  On Error Resume Next
  If KeyCode = 9 Or KeyCode = 13 Or KeyCode = 40 Then
   KeyCode = 0: TextBox1.SetFocus: TextBox1.SelStart = Len(TextBox1) - 1: TextBox1.SelLength = 1
  End If
End Sub

Code của Anh MinhTu cũng thật sự là hay! Chỉnh thêm thuộc tính là không cần chặn gì hết cũng như điều kiện gì hết nhưng rất hiệu quả! Cám ơn Anh.
PHP:
Private Sub TextBox1_Enter()
 On Error Resume Next
 TextBox1.SelStart = Len(TextBox1) - 1: TextBox1.SelLength = 1
End Sub

Đặt Properties EnterFieldBehavior của TextBox1 = 1 là OK
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom