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

当我第一次单击未聚焦到列表框的向下箭头时,第二次单击聚焦的向下箭头..一旦光标到达列表框,如果我单击输入,则应显示在文本框中..为此我给了这样的代码..

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 event而不是依赖KeyDown一个。同样对于ListBox您只需要该SelectedIndexChanged事件。此外,您的代码有很多错误(错误的查询(-> 您不需要每次都调用您的数据库来订购 ListBox 中的项目),依赖于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匹配(大写无关紧要)中的至少一个元素的起始子字符串)中的整个字符串。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 回答