点击向下箭头光标需要另外控制

时间:2013-07-28 10:03:04

标签: vb.net

enter image description here

我给出了这样的代码:

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

当我第一次没有聚焦到列表框时,第二次点击向下箭头,第二次点击正在聚焦的箭头..一旦光标到达列表框,如果我clik输入应该显示在文本框中。因为我给了这样的代码..

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

1 个答案:

答案 0 :(得分:1)

您应该依赖KeyUp event而不是KeyDownListBox。同样对于SelectedIndexChanged,您只需要SelectedIndex事件。此外,您的代码有很多错误(错误的查询( - >您不需要每次在ListBox中订购项目时调用您的数据库),依赖于SelectedItem而不是{{1} } ...)。这里有更新版本:

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中的整个字符串是否与LstEmployee中的一个元素的起始子字符串匹配(上限无关)) txtemployeename中引入了新角色。 ListBox随这些事件更新。 txtemployeenameLstEmployee中显示所选项目的名称。

我希望这足以帮助您构建提供所需功能所需的代码。

注意:请记住,此方法(删除/添加Items)与ListView填充DataSource的情况不兼容。如果您依赖DataSource,则必须相应地更新此代码。

注2:建议的方法处理ListView中的元素。你必须从一开始就从你使用的任何来源引入这些元素;此代码仅更新现有信息(ListBox中的项目)。另请注意,此代码有望更正以符合您的确切要求;例如:list必须与项目总数(在开始时从数据源检索到的项目)相关联,而不是与当前项目相关联(如代码中所示;它仅代表简化版本的项目)问题):每次新的人口出现时,所有项目(目标项目除外)都被删除,因此ListBox不代表可靠的来源。理解这一点的例子:一开始,你有“aaaa”,“bbbb”,“cccc”;如果输入“a”,则除“aaaa”之外的所有元素都将被删除。如果你现在输入“b”并考虑ListBox中的实际元素,只要唯一的元素是“aaaa”就不会发生变化;你必须考虑所有原始元素(通过注释建议,可能存储在数组/字符串列表的开头)。