2012-02-13 13 views
5

Tôi có một hộp danh sách được gọi là lstSerial và một hộp văn bản được gọi là txtSerials. Những gì tôi muốn làm là tìm kiếm lstSerial cho chuỗi được nhập vào txtSerials. Tôi đang sử dụng VB6 trong Microsoft Visual Basic 6.0, và tôi đang có một thời gian khủng khiếp tìm tài liệu.Tìm kiếm một ListBox cho một chuỗi được chỉ định VB6

Cảm ơn.

Trả lời

7

@ câu trả lời AlexK là đúng về mặt kỹ thuật - có - nó sẽ làm việc, nhưng nó không phải là cách ưa thích để đi. Có một cuộc gọi API cho mục đích này rất:

Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" _ 
    (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As _ 
    Integer, ByVal lParam As Any) As Long 

'constants for searching the ListBox 
Private Const LB_FINDSTRINGEXACT = &H1A2 
Private Const LB_FINDSTRING = &H18F 

'function to get find an item in the Listbox 
Public Function GetListBoxIndex(hWnd As Long, SearchKey As String, Optional FindExactMatch As Boolean = True) As Long 

    If FindExactMatch Then 
     GetListBoxIndex = SendMessage(hWnd, LB_FINDSTRINGEXACT, -1, ByVal SearchKey) 
    Else 
     GetListBoxIndex = SendMessage(hWnd, LB_FINDSTRING, -1, ByVal SearchKey) 
    End If 

End Function 

Vì vậy, bạn muốn làm điều này:

lstSerial.ListIndex = GetListBoxIndex(lstSerial.hWnd, txtSerials.Text) 

Source

+0

+1 Điều này chạy nhanh hơn nhiều – MarkJ

6

Tài liệu; http://msdn.microsoft.com/en-us/library/aa267225(v=VS.60).aspx

dim find as string,i as long,found as boolean 
find=txtSerials.text 

for i=0 to lstserial.listcount - 1 
    if strcomp(find, lstSerial.list(i), vbTextcompare)=0 then 
     found = true 
     lstSerial.setfocus 
     lstSerial.listindex= i 
     exit for 
    end if 
next 

if not found then msgbox "not found ..." 
+1

+1 Tôi sử dụng phương pháp này cũng vậy, tôi chưa bao giờ thấy hiệu suất của nó trở nên tồi tệ, vì vậy, hãy thích nó hơn các cuộc gọi API –

Các vấn đề liên quan