0

ここに画像の説明を入力

私はこのようなコードを与えました:

Private Sub txtemployeename_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtemployeename.KeyDown
        keyval = e.KeyData
        Dim keyData As System.Windows.Forms.Keys = e.KeyData
        If keyData = Keys.Down Then
            LstEmployee.Visible = True
            LstEmployee.Focus()
        End If
    End Sub

最初にリストボックスにフォーカスしていない下向き矢印をクリックしている間、2回目はフォーカスしている下向き矢印をクリックしています..また、カーソルがリストボックスに来たら、クリックするとテキストボックスに表示されるはずです..そのために私はこのようなコードを与えました..

Private Sub LstEmployee_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LstEmployee.Enter
        txtemployeename.Text = LstEmployee.SelectedItem   
End Sub   

しかし、これは正しく機能していません..リストボックスをロードするために、次のようなコードを指定しました:

 Private Sub txtemployeename_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtemployeename.KeyPress

        Dim s As String = txtemployeename.Text
        LstEmployee.Visible = True
        loadlistbox(LstEmployee, "select  Ename from EmployeeMaster_tbl where Ename LIKE'%" & s & "%' ")

    End Sub
4

1 に答える 1

1

KeyUp event1つではなく、 1つに依存する必要がありKeyDownます。また、イベントListBoxが必要なだけです。SelectedIndexChangedさらに、コードにはかなりの数のエラーがあります (間違ったクエリ (-> ListBox 内のアイテムを注文するために毎回 DB を呼び出す必要はありません)、に依存するのでSelectedIndexはなくSelectedItem...)。ここに更新されたバージョンがあります:

Private Sub txtemployeename_KeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles txtemployeename.KeyUp
    Dim s As String = txtemployeename.Text
    LstEmployee.Visible = True

    Dim list = LstEmployee.Items.Cast(Of String)()

    Dim query = From item As String In list Where item.Length >= s.Length AndAlso item.ToLower().Substring(0, s.Length) = s.ToLower() Select item

    If (query.Count > 0) Then
        Dim newItems = New List(Of String)()
        For Each result In query
            newItems.Add(result)
        Next

        LstEmployee.Items.Clear()
        For Each newItem In newItems
            LstEmployee.Items.Add(newItem)
        Next
    End If
End Sub

Private Sub LstEmployee_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LstEmployee.SelectedIndexChanged
    txtemployeename.Text = LstEmployee.SelectedItem
End Sub

上記のコードは、 に新しい文字が導入されるたびに、出現箇所をチェックします (つまり、 の文字列全体が のtxtemployeename少なくとも 1 つの要素の開始部分文字列と一致するかどうか (大文字は関係ありません)) 。ListBox は、これらの発生で更新されます。で選択した項目の名前が表示されます。LstEmployeetxtemployeenametxtemployeenameLstEmployee

これが、目的の機能を正確に提供するために必要なコードを作成するのに十分な助けになることを願っています.

注: このアプローチ (削除/追加Items) は、ListView にDataSource. DataSource に依存している場合は、それに応じてこのコードを更新する必要があります。

注 2: 提案されたアプローチは、ListView 内の要素を扱います。使用しているソースに関係なく、最初にこれらの要素を導入する必要があります。このコードは、既存の情報 (ListBox 内の項目) のみを更新します。また、このコードは正確な要件に一致するように修正されることが期待されていることにも注意してください。例えば:listアイテムの総数 (最初にデータソースから取得されたアイテム) に関連付ける必要があります。現在のアイテム (コードに表示されているように、単純化されたバージョンの問題を表しているだけです) ではありません。すべての項目 (ターゲット項目以外) が削除されるため、ListBox は信頼できるソースを表していません。これを理解するための例: 最初に、「aaaa」、「bbbb」、「cccc」があります。「a」と入力すると、「aaaa」以外のすべての要素が削除されます。ここで「b」と入力して、ListBox 内の実際の要素を検討すると、要素が「aaaa」だけである限り、変更は発生しません。すべての元の要素を考慮する必要があります (コメントで提案されているように、最初に文字列の配列/リストに格納されている可能性があります)。

于 2013-07-28T12:41:20.217 に答える