我有一个ComboBox。我的问题是当我点击元素1,然后开始键入元素2的名称时,我的元素2的第一个字母被添加。这只发生在点击事件后的按键上。
过程:
单击并在单个选定元素上输入键可以正常工作。
我的AutoCompleteMode设置为Append,AutoCompleteSource设置为ListItems
我认为控制点击的解决方案在我的SelectionChangeComitted
功能中。当我们知道鼠标单击组合框中的元素时,我可以控制标志isCLick
仅设置为true。如果用户点击整个ComboBox,MouseClick
将返回true,因此如果我们正在处理这个特定的ComboBox,它将始终为true。由于参数为EventArgs
,我无法直接将其投放到MouseEventArgs
,如果可以的话会很好。
总结一下我的问题:我需要在isClick
中替换SelectionChangeCommitted
布尔值来验证SelectionChangeCommitted
是否是由点击或{不。
在这种情况下可以吗?是否有任何替代方案可以绕过这个问题?
我有下面的事件处理程序代码,调用的顺序是:MouseClick - > PreviewKeyDown - > SelectionChangeCommitted - > SelectedValueChanged
AddHandler CType(ctl, ComboBox).PreviewKeyDown, Sub(sender As Object, e As PreviewKeyDownEventArgs)
If e.KeyCode = Keys.Down OrElse e.KeyCode = Keys.Up OrElse e.KeyCode = Keys.Right OrElse e.KeyCode = Keys.Left Then
e.IsInputKey = False
AddToGrid = False
isArrowKey = True
isClick = False
ElseIf e.KeyCode = Keys.Enter OrElse e.KeyCode = Keys.Tab Then
AddToGrid = True
isArrowKey = False
isClick = False
'Check if row already exists before insert a new one.
If Not RowExists(DirectCast(ctl, Control).Tag, DirectCast(ctl, ComboBox).Text.ToUpper()) Then AppendGrid(sender)
Else
AddToGrid = False
isArrowKey = False
isClick = True
End If
End Sub
AddHandler CType(ctl, ComboBox).SelectedValueChanged, Sub(sender As Object, e As EventArgs)
'MessageBox.Show("SelectionValueChanged")
If CType(sender, ComboBox).SelectedValue Is Nothing Then Return
If Not AddToGrid Then Return
'Check if row already exists before insert a new one.
If Not RowExists(DirectCast(ctl, Control).Tag, DirectCast(ctl, ComboBox).SelectedValue.ToString().ToUpper()) Then
AppendGrid(sender)
End If
End Sub
AddHandler CType(ctl, ComboBox).SelectionChangeCommitted, Sub(sender As Object, e As EventArgs)
'MessageBox.Show("SelectionChangedCommitted")
If CType(sender, ComboBox).SelectedValue Is Nothing Then Return
If isArrowKey Then Return 'if an arrow was used, then don't add it to the grid
If isClick Then
AddToGrid = True
End If
'Check if row already exists before insert a new one.
If Not RowExists(DirectCast(ctl, Control).Tag, DirectCast(ctl, ComboBox).SelectedValue.ToString().ToUpper()) AndAlso AddToGrid Then
AppendGrid(sender)
End If
End Sub
AddHandler CType(ctl, ComboBox).MouseClick, Sub(sender As Object, e As MouseEventArgs)
'MessageBox.Show("MouseClick")
isClick = True
AddToGrid = True
End Sub
答案 0 :(得分:0)
除非执行点击,否则此处的所有内容似乎都能正常运行。我建议你在使用后重置点击。在SelectionChangeCommitted中尝试以下代码。
If isClick Then
AddToGrid = True
isClick = false
End If