-
Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
ongke0711 > 01-03-16, 10:41 PM
Nhờ các bạn chỉ giùm cái thủ thuật này.
Có thể cái tiêu đề chưa thật sự chính xác nên các bạn xem giùm cái đoạn video dưới đây.
Đây là chương trình quản lý phòng khám của tác giả Trần Quốc Vinh giới thiệu trên Youtube, tôi thấy cái thủ thuật rất hay là khi gõ một từ nào đó vào textbox thì nó sẽ hiện luôn các kết quả tìm kiếm để chọn và thêm vào cùng 1 dòng textbox đó chuỗi kết quả vừa tìm được. Sau đó gõ từ để tìm tiếp và lại thêm kết qủa nối tiếp chuỗi.
Video:
Các bạn hướng dẫn giùm kỹ thuật này nhé.
Cám ơn cac bạn trước. -
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
maidinhdan > 02-03-16, 11:07 AM
(01-03-16, 10:41 PM)ongke0711 Đã viết: Nhờ các bạn chỉ giùm cái thủ thuật này.
Có thể cái tiêu đề chưa thật sự chính xác nên các bạn xem giùm cái đoạn video dưới đây.
Đây là chương trình quản lý phòng khám của tác giả Trần Quốc Vinh giới thiệu trên Youtube, tôi thấy cái thủ thuật rất hay là khi gõ một từ n
Các bạn hướng dẫn giùm kỹ thuật này nhé.
Cám ơn cac bạn trước.
Kỹ thuật này rất đơn giản.
Xin được ví dụ:
Ta có những thứ như sau:
+ Tạo 1 TextboxA: tạm gọi là txtA ( nơi sẽ nhập vào như Video được hỏi trên)
+ Tạo 1 form Tạm tên là frTam; trong form này có 1 combox ( tên cbDanhsachtruyxuat, thằng này tham chiếu đến danh sách đang chờ lấy), combobox này sau khi được Enter phải đóng cả form frmTam lại
Ta bắt tay vào làm thôi.
Bước 1: Nhúng form frTam vào form chứa txtA
Bước 2: Tại form chứa txtA Cho rằng cái nháy chuột đang nằm ở ô txtA, ở sự kiện Keypress khi gõ 1 cụm từ nào đó nó sẽ tham chiếu đến frTam và truy xuất thẳng đến cbDanhsachtruyxuat, Sau khi kiếm được từ cần lấy thì Enter để lấy và điền vào txtA.
Nếu tiếp tục gõ dấu phẩy lại quay về bước 2.
* Đó là phương thức để viết code theo Video yêu cầu phía trên.
Chú ý ( cái này có hay không cũng không sao, có thì nó đẹp hơn thôi): phải viết một Modules để cho form frTam cho đúng vị trí hiển thị như một cobo Listbox ( code này bạn có thể tìm hiểu từ Demo chọn ngày tháng bằng Calender của mình trên diễn đàn để lấy mà dùng)
Vài ngày nửa mình gửi Demo lên để cùng thảo luận cùng Ongke nhé, cần gấp thì để lại Email tối nay mình gửi.
Thân ái! -
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
ongke0711 > 02-03-16, 02:12 PM
Cảm ơn bác maidinhdan nhiều. Để tôi làm thử theo gợi ý xem sao. -
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
tt1212 > 02-03-16, 10:50 PM
mai dinh dan cho mình vơi nhe: thietgialam@gmail.com -
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
MTNQ > 03-03-16, 09:33 AM
Cái này đơn giản chỉ là thủ thuật tìm kiếm, kết quả hiển thị trên một listbox với chiều cao mặc định = 0
-Khi nhập dữ liệu vào textbox ta cho list hiển thị bằng cách set chiều cao cho listbox
-Khi textbox mất focus thì listbox.Height = 0
Trước đây MTNQ viết một class: clsAutoSearch nhằm giả lập ComboBox. tuy nhiên muốn đem lên đây thì phải sửa lại khá nhiều (Thêm các bẫy lỗi, các tùy chọn, dự trù thêm nhiều tình huống có thể xảy ra...) do nó mang tính cộng đồng. Mặc dù gọi class chỉ cần 1 hoặc vài dòng lệnh nhưng phải giải thích khá nhiều về cách sử dụng cũng như tùy biến các thuộc tính, giá trị... Nên mình lười up lên -
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
tt1212 > 03-03-16, 01:50 PM
Mình vẽ một text box và một combox phai không bác nhỉ.
Rồi so sánh hay sao nhỉ?
Chưa hiểu lắm bác a, bác có thể hướng dẫn thêm ko?Mình vẽ một text box và một combox phai không bác nhỉ.
Rồi so sánh hay sao nhỉ?
Chưa hiểu lắm bác a, bác có thể hướng dẫn thêm ko? -
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
MTNQ > 03-03-16, 03:46 PM
(03-03-16, 01:50 PM)tt1212 Đã viết: Mình vẽ một text box và một combox phai không bác nhỉ.
Rồi so sánh hay sao nhỉ?
Chưa hiểu lắm bác a, bác có thể hướng dẫn thêm ko?
Mình làm như thế này:
1/ trên form vẽ một list box với các thông số sau: Left:=0, Top:=0, Width:=0, Height:=0
Chạy hàm sau đây nó sẽ tự động tạo một list box có tên lstAutoSearch trên form (nhớ thay frmTimkiem bằng tên form của bạn ):
Mã:Sub CreateCtrl_lstAutoSearch()
Const strForm = "frmTimkiem" 'Thay frmTest bang ten form ban muon tao List Box cho clsAutoSearchData
Const strCtl = "lstAutoSearch"
Dim frm As Form
Dim ctl As Control
DoCmd.OpenForm FormName:=strForm, View:=acDesign, windowmode:=acHidden
Set frm = Forms(strForm)
Set ctl = CreateControl(FormName:=strForm, ControlType:=acListBox, Section:=acDetail, _
Left:=0, Top:=0, Width:=0, Height:=0)
With ctl
.Name = strCtl
'.BorderStyle = 0
.BorderWidth = 0
.TabStop = False
.RowSourceType = "Table/Query"
.Visible = False
End With
' Save the form, close and reopen it
DoCmd.Close ObjectType:=acForm, ObjectName:=strForm, Save:=acSaveYes
DoCmd.OpenForm FormName:=strForm, View:=acNormal
' Or Switch to form view
'RunCommand acCmdFormView
End Sub
2/Khi điều khiển nhận focus, ta đưa listbox đến ngay bên dưới với code tương tự như sau:
Với mLstBox là lstAutoSearch và mActiveCtrl là điều khiển đang có focusMã:With mLstBox
.Top = mActiveCtrl.Top + mActiveCtrl.Height
.Left = mActiveCtrl.Left
.Width = mActiveCtrl.Width
Set .Recordset = Nothing
End With
3/Khi người dùng nhập dữ liệu ta bắt đầu tạo Source cho lstAutoSearch và dùng thuộc tính Filter của Recordset để lọc theo dữ liệu đang được nhập trên điều khiển. Code sẽ như sau:
Mã:If Not (rstFiltered.EOF And rstFiltered.BOF) Then
With mLstBox
.Height = 1440
.ColumnCount = miFldsNum
Set .Recordset = rstFiltered
.Visible = True
End With
End If
4/Việc lấy dữ liệu từ listbox (Lst) lên điều khiển (Ctrl) dựa vào sự kiện KeyDown của Ctrl và Lst
Nó tương tự như sau:
Mã:Private Sub mLstBox_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
BuildLstEvent "PreviousCtrl"
End If
End Sub
Private Sub mLstBox_DblClick(Cancel As Integer)
BuildLstEvent "PreviousCtrl"
End Sub
Private Function BuildLstEvent(strEvent As String, Optional mActiveCtrl As Control, _
Optional blnLstActive As Boolean) As Boolean
On Error GoTo Err_BuildLstEvent
...
Select Case KeyCode
...
Case "PreviousCtrl"
On Error Resume Next
mPreviousCtrl.SetFocus
With mLstBox
.Height = 0
Set .Recordset = Nothing
.Visible = False
End With
End Select
...
End Function
...
5/Việc hiển thị kết quả tìm kiếm nhanh hay chậm phụ thuộc nhiều vào thuật toán và nguồn dữ liệu. Theo kinh nghiệm của mình thì table nguồn lớn hơn 20 000 record sẽ không thực hiện việc tìm kiếm ở các sự kiện như On Change của Ctrl mà hiển thị khi người dùng bấm một phím tắt nào đó -
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
MTNQ > 03-03-16, 03:59 PM
Một vài kinh nghiệm chia sẻ khi dùng sự kiện On Change của điều khiển để hiển thị kết quả tìm kiếm ngay khi người dùng nhập dữ liệu :
-Không tìm kiếm khi người dùng bấm phím Backspace (tức là KeyCode = vbKeyBack):
-> Cái này thì liên quan tới anh chàng Unikey. Vì Unikey bắt tín hiệu từ bàn phím, can thiêp vào các sự kiện KeyDown,KeyUp,KeyPress,Change của Ctrl.
Để thay các từ không dấu thành có dấu, trước tiên vbKeyBack được gọi nhằm xóa ký tự không dấu sau đó thay bằng bằng ký tự có dấu
VD: Khi nhập từ "đường", một số người nhập "duong" sau đó mới bỏ dấu. Unikey sẽ làm như sau:
1- Gọi vbKeyBack 5 lần để xóa hết chữ "duong", thay d bằng đ (các sự kiện KeyDown, KeyUp, KeyPress, Change cũng được gọi 5 lần)
2- Tiếp tục gọi các sự kiện để nhập lại các ký tự tiếp theo thành chữ "đuong"
Với "ư" hay "ơ" cũng tương tự như trên
=> Với chữ "đường" thì On Change được gọi 29 lần và vbKeyBack được gọi 12 lần
Như vậy để hạn chế việc tìm kiếm dư thừa, ta Không nên tìm kiếm khi KeyCode = vbKeyBack
-
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
ongke0711 > 03-03-16, 04:41 PM
Chưa bắt tay vô làm nhưng thấy bạn phân tích cái vụ phím Backspace đúng là cẩn thận và đã trải nghiệm hay quá. Nhưng cho hỏi lại là Space hay Backspace? -
RE: Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
MTNQ > 03-03-16, 07:25 PM