2010-11-29 28 views
1

VB6からVB.Netにアプリケーションを移行していますが、ListBoxの動作に変更があり、VB6と同じにする方法がわかりません。VB.NetのListBox要素を検索する

問題はこれです:

VB6アプリでは、リストボックスにフォーカスし、私はそれに入力されると、リストは私が入力する内容と一致する要素を選択します。例えばリストに国のリストが含まれていて、「ita」と入力すると、リストボックスで「イタリア」が選択されます。 問題は、コントロールの.Netバージョンでは、 "ita"と入力すると最初の要素がiで始まり、最初に "t"で始まり、最後に "a"で始まる要素が選択されます。 "

元の動作を取得する方法については、どのようなアイデアですか? (私は何らかの理由で見ていないと思っています。何かの理由で見ていないと思っています)

私は本当にこれについてのイベントハンドラを書こうと思っていません(btwは些細なことではありません)。

ありがとうございます!

答えて

1

この機能は「先行型」と呼ばれ、Winform ListBoxには組み込まれていないため、プロパティが不足していません。

のプロパティをViewに設定すると、先行機能をListViewコントロールで取得できます。

+0

[OK]を、おかげで多くは、実際に私は機能が「先行入力」と呼ばれたことを知らなかった:) – willvv

-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

4

私はwillwの欲求不満を共有しました。これは私が思いついたものです。 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