Xin hỏi định dạng font cho textbox để tìm kiếm trong listview

  • Thread starter Thread starter KVP
  • Ngày gửi Ngày gửi
Liên hệ QC

KVP

Thành viên thường trực
Tham gia
7/7/07
Bài viết
218
Được thích
301
Nghề nghiệp
Cộng đồng
Tôi đang tìm kiếm trong cột Tên. Định dạng textbox tên là Font Tahoma. Khi dùng một số hàm chuyển font textbox sang TCVN3 để tìm kiếm thì một số tên không tìm thấy được. Nếu định dạng Texbox .Vntime thì chữ "ư" không đánh được.

Mong các bạn chia sẻ chút kinh nghiệm.

Nếu tôi muốn định dạng các item bằng font .vntimeH. Xin hỏi định dạng tetbox ntn? để tìm kiếm cho chính xác Font chữ?
 

File đính kèm

Cách làm thế này:

Trong list view:

Cột 1:
Cộng Hòa Xã Hội Chủ nghĩa Việt Nam
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Cộng hòa Xã hội Chủ nghĩa Việt Nam
v.v...

thì bạn sinh ra 1 cột ẩn cũng có bảng mã là TCVN3 nhưng dạng chữ thấp LCase$()

Cột 2 (Ẩn)
cộng hòa xã hội chủ nghĩa việt nam
....

Lúc tìm kiếm, ô text, bạn có thể chuyển tất cả chuỗi tìm kiếm thành dạng LCase hết (Ư --> ư, Đ --> đ, Ô --> ô, v.v...). Sau đó bạn hãy tìm kiếm đoạn đó ở cột dữ liệu đã dịch ra (Cột ẩn thứ 2) trên Grid/ListView/ListBox, v.v...

Với cách làm đó bạn có thể tìm được chữ cao, chữ thấp.

Nhưng cách đó chưa mạnh, bạn tốt nhất là hãy chuyển thành không dấu, và đều chuyển thành LCase hết. Với cách đó bạn có thể gõ ko dấu mà vẫn tìm được các từ có dấu, cao thấp đủ cả.

Dĩ nhiên bạn có thể có option là "Tìm chính xác" hoặc không.

Còn cái hàm chuyển tất cả về chữ thường có dấu (ví dụ: TCVN3LCase) hoặc hàm chuyển sang không có dấu (TCVN3LCaseWOMark) thì chắc bạn tự làm vì đó chỉ là lập trình bình thường (sử dụng mấy vòng for cùng mấy cái hàm string thôi)
 
Upvote 0
Cám ơn anh.
Nhưng nếu làm như vậy, thi khi tìm kiếm theo nhiều trường khác nhau sẽ phải dùng nhiều cột ẩn. Dữ liệu sẽ lớn hoặc khi load dữ liệu lên ListView sẽ chậm lại.
Nếu vậy, thì format Textbox = Lcase() rồi tìm trực tiếp trên Sheets rồi Load lên listview liệu có nhanh được hơn không anh ?
 
Upvote 0
Nhưng nếu làm như vậy, thi khi tìm kiếm theo nhiều trường khác nhau sẽ phải dùng nhiều cột ẩn. Dữ liệu sẽ lớn hoặc khi load dữ liệu lên ListView sẽ chậm lại.

- Thường thì khi save (insert/update) dữ liệu, nên chuyển ngay thành 1 dạng LCase không dấu đó (việc này viết khéo thì nhanh). Còn việc Display lên Listview thì do các bạn add items và ít sử dụng các "advance technique" nên có thể việc load dữ liệu sẽ chậm. Bọn mình select dữ liệu từ database lên grid nhanh khủng khiếp. Chú ý: Nguyên tắc thứ tự tìm sẽ là:
+ Tìm cột gốc trước, nếu không thấy thì:
+ Tìm cột có dấu và LCase tiếp theo, nếu không thấy thì:
+ Tìm cột không dấu

- Ngoài ý tưởng đó ra, đa phần các Search Engine mạnh bao giờ cũng tạo Index để làm Từ điển (Word Indexing). Khi đã có từ điển, thì bạn có thể tìm kiểu từ "gần giống" (giống kiểu google hay làm đó). Ví dụ như bạn tìm "Cái kẹo" thì các dòng có từ "cái kẹo" lên trước, rồi những cái na ná như "cái kéo",... xếp liền sau đó. Nhưng mà thôi, bạn có thể bỏ qua ý tưởng viển vông này.

Nếu vậy, thì format Textbox = Lcase() rồi tìm trực tiếp trên Sheets rồi Load lên listview liệu có nhanh được hơn không anh ?

Ý tưởng thì đại loạinlà như vậy (mấy thứ này bọn mình mới gần đây nghĩ tới khi có dự định nâng cấp tính năng tra cứu dạng như google trong PM), còn chi tiết làm như thế nào trên Excel thì mình chịu. Mọi người tự nghĩ cách để tối ưu thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn rất nhiều sự chia sẻ kinh nghiệm và cách tư duy về vấn đề này của anh.
 
Upvote 0
Tôi đang tìm kiếm trong cột Tên. Định dạng textbox tên là Font Tahoma. Khi dùng một số hàm chuyển font textbox sang TCVN3 để tìm kiếm thì một số tên không tìm thấy được. Nếu định dạng Texbox .Vntime thì chữ "ư" không đánh được.

Mong các bạn chia sẻ chút kinh nghiệm.

Nếu tôi muốn định dạng các item bằng font .vntimeH. Xin hỏi định dạng tetbox ntn? để tìm kiếm cho chính xác Font chữ?

Trong module TienIchChuViet của bạn có 2 hàm SortUni và SortVn3 (dùng để chuyển chuỗi Unicode và TCVN3 ABC sang mã để sắp xếp tiếng Việt), tôi đề nghị bạn sử dụng 2 hàm này cho việc tìm kiếm.
Chuỗi​
|
SortUni, SortVn3​
|
Ấn|azzn1|
Hóa|Hoa1|
Hoá|Hoa1|
Nguyễn|Nguyezn4|
Thúy|Thuy1|
Thuý|Thuy1|
Ưu điểm của 2 hàm này là không phân biệt vị trí bỏ dấu. Hòa hay Hoà, Thúy hay Thuý đều cho kết quả giống nhau. Rất tiện lợi khi tìm kiếm tiếng Việt.

Mã:
Private Sub TxtTen_HS_AfterUpdate()
Dim i As Long, TenTxt As String, TenLis As String
  TenTxt = LCase(SortUni(Me.TxtTen_HS.text))  [COLOR=Blue]'chuyển chuỗi Uni sang mã sắp xếp tiếng Việt[/COLOR]
  For i = 1 To Me.LvwDS.ListItems.Count
    TenLis = LCase(SortVn3(Me.LvwDS.ListItems(i).SubItems(2)))     [COLOR=Blue] 'chuyển chuỗi TCVN3-ABC sang mã sắp xếp tiếng Việt[/COLOR]
    If InStr(1, TenLis, TenTxt, 0) > 0 Then
      Me.LvwDS.ListItems(i).Selected = True
     End If
  Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn anh. Theo gợi ý của anh Hai2Hai em đã seach được bài viết của bác và đang tìm hiểu Tiện ích này.
Em đang loay hoay vấn đề là: Nếu Textbox định dạng UNICODE thì Người dùng có thể nhìn thấy phông chữ hiển thị. Nhưng nếu họ đang dùng font TCVN3 thì lại phải đổi font để gõ. Nếu Textbox định dạng TCVN3 thì một số chữ khi gõ lại không hiển thị được
 
Upvote 0
Em đang loay hoay vấn đề là: Nếu Textbox định dạng UNICODE thì Người dùng có thể nhìn thấy phông chữ hiển thị. Nhưng nếu họ đang dùng font TCVN3 thì lại phải đổi font để gõ. Nếu Textbox định dạng TCVN3 thì một số chữ khi gõ lại không hiển thị được

- Trong khi sử dụng, bạn cần thống nhất 1 loại bảng mã (chứ ko phải là font chữ nhé). Unicode thì toàn bộ là Unicode, TCVN3 thì toàn bộ là TCVN3 đối với dữ liệu và các controls để hiển thị dữ liệu. Đó gọi là tính thống nhất (consistency) trong ứng dụng.

- Nếu dữ liệu đã ở dạng bảng mã TCVN3 thì cũng ko thể gõ được "Ổ" đâu nên ở ô TextBox cũng ko cần phải chú ý tới việc gõ chứ to, nhỏ làm gì vì TCVN3 là 1 byte nên ko bao giờ trở thành 2 bytes như Unicode hay VNI Windows. Về bản chất khi mình gõ dòng "cộng hòa xã hội" dùng bảng mã TCVN3, chọn font .vnArialH thì mã của nó vẫn là chữ 1 byte thôi chứ ko phải là "CỘNG HÒA XÃ HỘI" như hiển thị đâu. Khi đó tìm kiếm nó vẫn theo dạng 1 byte. Không tin thì chọn font .vnArial là thấy nó lại "thấp" ngay.
 
Upvote 0
Web KT

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

Back
Top Bottom