2013-09-28 2 views
2

.FindString을 사용할 수 있지만 어떤 이유로 작동하지 않습니다.목록 상자에 텍스트 상자가 포함되어 있는지 확인하십시오.

기본적으로 목록 상자 항목에 텍스트 상자 텍스트 부분 만 있으면 작업을 수행합니다.

다음은하지 않은 작업 코드의 예입니다 :

Dim x As Integer = -1 
     x = ListBox1.FindString(TextBox1.Text) 
     If x > -1 Then 
      'dont add 
      ListBox2.Items.Add("String found at " & x.ToString) 
     Else 

     End If 
+0

내 대답이 충분히 명확했으면 좋겠어. 전체 항목을 일치시키기 위해 FindString 대신 FindStringExact를 사용해야합니다. 예를 들어, ListBox에 "test1", "test"가 포함 된 경우; "test"(또는 "tes"또는 "te"등)와 함께 FindString을 사용하면 첫 번째 항목을 반환합니다. 반면에 "test"와 함께'FindStringExact'를 사용하면 두 번째 항목을 반환합니다 ("tes", "te"등으로는 아무 것도 찾을 수 없습니다). – varocarbas

+0

@varocarbas 텍스트 상자에 'foo.txt'가 들어 있고 목록 상자에 'C : \ Users \ foo.txt'가 포함되어 있으면 작동하지 않습니다. (.findstring과 .findstringexact를 모두 의미합니다.) – Jedi

+0

이것은 내 답변에서 말한 것입니다. 보다 복잡한 기능을 원하면 각 요소를 통해 상호 작용해야합니다. 이 경우 모든 항목을 통해 foreach 루프를 수행하고 각 항목에 대해'.Contains'를 사용해야합니다 (발견되면 'Exit For'). foreach 루프는 정말 빠르며 성능에 영향을주지 않습니다. 'FindString'이나'findstringexact'는 정확히 모든 것을 처리한다는 것을 명심하십시오. 다음 번에는 정확한 조건을 설명해주십시오. 정확한 결과를 제공하는 작업 코드를 적어 둘 수 있습니다 (원하는 경우 지금 할 수 있습니다). – varocarbas

답변

3

FindString 방법은 검색 문자열 (MSDN)로 시작하는 첫 번째 항목을 반환합니다. 전체 항목을 일치 시키려면 FindStringExact (MSDN)을 사용해야합니다. 보다 복잡한 검색을 수행하려면 ListBox의 모든 요소를 ​​반복해야합니다.

업데이트 : OP가 기대하는 정확한 기능을 제공하는 코드.

For i As Integer = 0 To ListBox1.Items.Count - 1 
    If (ListBox1.Items(i).ToString.Contains(TextBox1.Text)) Then 
     ListBox2.Items.Add("String found at " & (i + 1).ToString) 'Indexing is zero-based 
     Exit For 
    End If 
Next 
+0

감사합니다. 잠시 후에 시도해보십시오. EDIT : 작품처럼 매력적으로 작동합니다. – Jedi

+0

@ Jedi 문제가 없습니다. 나는 1에서 시작하는 결과를 출력하고 싶다고 생각한다. (내 코드의 인덱싱은 0부터 시작한다.) 그 이유는'(i + 1) .ToString'이다. 또한 ListBox1.Items (i) .ToString.ToLower.Contains (TextBox1.Text.ToLower')와 비교할 때 ToLower를 사용하여 대문자를 무시하도록 할 수 있습니다. – varocarbas

+0

@Jedi 나는 이것을 읽게되어 기쁩니다. 제발, 다음에 가능한 한 서술적이어야합니다 (질문 할 때뿐 아니라 질문하거나 요청할 때 등). 나는 여기 돕는다. 하지만 내가 필요한 것을 모르는 경우에는 도움을받을 수 없습니다. – varocarbas

관련 문제