我给出了这样的代码:
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
答案 0 :(得分:1)
您应该依赖KeyUp event
而不是KeyDown
。ListBox
。同样对于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随这些事件更新。 txtemployeename
在LstEmployee
中显示所选项目的名称。
我希望这足以帮助您构建提供所需功能所需的代码。
注意:请记住,此方法(删除/添加Items
)与ListView填充DataSource
的情况不兼容。如果您依赖DataSource,则必须相应地更新此代码。
注2:建议的方法处理ListView中的元素。你必须从一开始就从你使用的任何来源引入这些元素;此代码仅更新现有信息(ListBox中的项目)。另请注意,此代码有望更正以符合您的确切要求;例如:list
必须与项目总数(在开始时从数据源检索到的项目)相关联,而不是与当前项目相关联(如代码中所示;它仅代表简化版本的项目)问题):每次新的人口出现时,所有项目(目标项目除外)都被删除,因此ListBox不代表可靠的来源。理解这一点的例子:一开始,你有“aaaa”,“bbbb”,“cccc”;如果输入“a”,则除“aaaa”之外的所有元素都将被删除。如果你现在输入“b”并考虑ListBox中的实际元素,只要唯一的元素是“aaaa”就不会发生变化;你必须考虑所有原始元素(通过注释建议,可能存储在数组/字符串列表的开头)。