2010-11-29 3 views
1

Я переношу приложение из VB6 в VB.Net, и я нашел изменение в поведении ListBox, и я не уверен, как сделать его равным VB6.Поиск ListBox элементов в VB.Net

Проблема заключается в следующем:

В приложении VB6, когда ListBox сфокусирован и набираю в него, список выбирает элемент, который соответствует тому, что я типа. например Если в списке содержится список стран, и я набираю «ita», в списке будет выбран «Италия». Проблема в том, что с .Net-версией элемента управления, если я набираю «ita», он выберет первый элемент, который начинается с i, затем первый элемент, который начинается с «t» и, наконец, первый элемент, который начинается с «a ».

Итак, любая идея о том, как получить первоначальное поведение? (Я думаю в какой-то собственности, которую я не вижу по какой-то причине или что-то в этом роде)

Я действительно не хочу писать обработчик событий для этого (что, кстати, не было бы тривиальным).

Большое спасибо!

ответ

1

Как вы, наверное, знаете, эта функция называется «тип впереди», и она не встроена в Winform ListBox (так что вы не пропускаете свойство).

Вы можете получить функциональность типа вперед в элементе управления ListView, если вы установили его свойство View в значение List.

+0

Хорошо, спасибо много, на самом деле я не знал, что эта функция называлась «типа вперед» :) – willvv 2010-11-30 12:27:15

-1
Public Function CheckIfExistInCombo(ByVal objCombo As Object, ByVal TextToFind As String) As Boolean 
     Dim NumOfItems As Object 'The Number Of Items In ComboBox 
     Dim IndexNum As Integer 'Index 
     NumOfItems = objCombo.ListCount 
     For IndexNum = 0 To NumOfItems - 1 
      If objCombo.List(IndexNum) = TextToFind Then 
       CheckIfExistInCombo = True 
       Exit Function 
      End If 
     Next IndexNum 
     CheckIfExistInCombo = False 
    End Function 
+1

Какое это имеет отношение к первоначальному вопросу? – willvv 2011-05-08 04:02:38

4

Я разделял разочарование воли. Это то, что я придумал. Добавьте в проект класс, называемый ListBoxTypeAhead, и включите этот код. Затем используйте этот класс в качестве элемента управления в вашей форме. Он ловут входной сигнал клавиатуры и перемещает выбранный элемент так, как это делал старый список VB6. Вы можете вынуть таймер, если хотите. Он имитирует поведение ввода клавиатуры в проводнике Windows.

Public Class ListBoxTypeAhead 

    Inherits ListBox 

    Dim Buffer As String 
    Dim WithEvents Timer1 As New Timer 

    Private Sub ListBoxTypeAhead_KeyDown(sender As Object, _ 
    e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown 

    Select Case e.KeyCode 
     Case Keys.A To Keys.Z, Keys.NumPad0 To Keys.NumPad9 
     e.SuppressKeyPress = True 
     Buffer &= Chr(e.KeyValue) 
     Me.SelectedIndex = Me.FindString(Buffer) 
     Timer1.Start() 
     Case Else 
     Timer1.Stop() 
     Buffer = "" 
    End Select 

    End Sub 

    Private Sub ListBoxTypeAhead_LostFocus(ByVal sender As Object, _ 
    ByVal e As System.EventArgs) Handles Me.LostFocus 

    Timer1.Stop() 
    Buffer = "" 

    End Sub 

    Public Sub New() 

    Timer1.Interval = 2000 

    End Sub 

    Private Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick 

    Timer1.Stop() 
    Buffer = "" 

    End Sub 

End Class 
Смежные вопросы