Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Help] Tự động tìm kiếm và điền thông tin trong textbox, cách nhau dấu phẩy " ,"
#1
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.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn tt1212
#2
(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!
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn ongke0711 , tvn_hut , Minh Tiên
#3
Cảm ơn bác maidinhdan nhiều. Để tôi làm thử theo gợi ý xem sao.
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
mai dinh dan cho mình vơi nhe: thietgialam@gmail.com
Reply
Những người đã cảm ơn
#5
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  015
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn Minh Tiên , ongke0711 , tt1212
#6
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?
Chữ ký của tt1212 Present Nhận viết phần mềm, hỗ trợ viết phần mềm, hợp tác viết phần mềm trên nên Microsoft Access mọi phiên bản Liên hệ: Mr Đức -989276236. Email: Tantriviet.vnn@gmail.com website:http://www.tantrivietsoft.com/
Reply
Những người đã cảm ơn
#7
(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:
Mã:
With mLstBox
                   .Top = mActiveCtrl.Top + mActiveCtrl.Height
                   .Left = mActiveCtrl.Left
                   .Width = mActiveCtrl.Width
                  Set .Recordset = Nothing
               End With
Với mLstBox là lstAutoSearch và  mActiveCtrl là điều khiển đang có focus

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 đó
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn ongke0711 , tvn_hut , maidinhdan
#8
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

 015
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn ongke0711 , maidinhdan
#9
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?
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#10
(03-03-16, 04:41 PM)ongke0711 Đã viết: 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?

-Là phím Backspace, có KeyCode = vbKeyBack = 8
Chữ ký của MatTroiNguQuen Thời gian nước chảy... da mòn
Ngủ quên một chốc thấy còn bộ xương!
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Tự động hiện Form khi loading hết thời gian ChiMai 1 35 02-12-16, 08:59 PM
Bài mới nhất: ongke0711
  [Help] Chỉnh giúp Form thống kê hoanghai902 2 123 28-10-16, 06:15 PM
Bài mới nhất: hoanghai902
  [Help] Giúp đỡ về cách xóa nội dung trong một field nam8384 2 117 17-10-16, 08:43 PM
Bài mới nhất: toancvp
  [Hỏi] Sử dụng chuột giữa trong subform là report. toancvp 10 353 12-10-16, 01:01 AM
Bài mới nhất: toancvp
  Lọc theo điều kiện trong listbox Ranju 3 175 06-10-16, 05:26 PM
Bài mới nhất: Ranju

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ