这是我目前的代码:
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
For Each item In markerDtable.Rows
If keyData = Keys.Space Then
comboSearchMarker.Text = item("MarkerName") ' Gets the items in MarkerName field but I need only one at a time.
End If
Next
End Function
如果您运行此代码,它会在MarkerName
字段中提供所有名称。无论如何,如果我再次按下SpaceKey
,那么我怎么才能得到只有一个?对不起,我真的不知道。
答案 0 :(得分:1)
问题是您使用For Each
循环迭代所有项目。这就是为什么在按下SPACE
时获得所有条目的原因。我想你的问题是如何记住你上次回复的那个条目: - )
您需要声明一个记住最后一个索引的静态变量:
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
Static lastEntryReturned As Integer = 0
If keyData = Keys.Space Then
comboSearchMarker.Text = markerDTable.Rows(lastEntryReturned).Item("MarkerName")
lastEntryReturned += 1
If lastEntryReturned >= markerDTable.Rows.Count
lastEntryReturned = 0
End If
End If
End Function
这会“记住”最后一个索引,直到下次调用该函数。由于局部变量为static
,因此删除了对此函数外部的“全局”变量的需求。因此,在对函数的调用之间也是有效的。
答案 1 :(得分:0)
为此函数之外的位置声明变量。
Dim pos As Integer
然后在功能:
If (keyData = Keys.Space and pos < markerDtable.Rows.Count) Then
pos += 1
comboSearchMarker.Text = markerDtable.Rows(pos).Item("MarkerName")
End If