所以基本上我有三个包含项目的列表框。我希望这些项目是可删除的,所以为此我得到了一个只有一个项目的ContextMenuStrip:删除。虽然,我也希望通过按Delete键来删除项目。所以我得到了我的代码,你可以在这里看到:
Dim TempList As New List(Of String)
For Each Trigger In ListBoxTriggers.SelectedItems
TempList.Add(Trigger)
Next
For Each Trigger In TempList
ListBoxTriggers.Items.Remove(Trigger)
Next
它有点长,因为有数据相关的东西,但现在这是有关从ListBox中删除的部分。现在,为此,我一直在使用
Private Sub ToolStripMenuItemTriggers_Click(sender As Object, e As EventArgs) Handles SupprimerToolStripMenuItemTriggers.Click
(supprimer表示用法语删除)。但问题是我想处理
Private Sub ListBoxDescription_KeyDown(sender As Object, e As KeyEventArgs) Handles ListBoxDescription.KeyDown
用同样的方法。但我不能,因为e不是同一类型...我当然可以在两个处理程序中复制相同的代码,但这并不是真的......干净。我也可以创建另一种方法,我会在
这两个方面调用Private Sub ListBoxDescription_KeyDown(sender As Object, e As KeyEventArgs) Handles ListBoxDescription.KeyDown
Delete()
End Sub
Private Sub ToolStripMenuItemTriggers_Click(sender As Object, e As EventArgs) Handles SupprimerToolStripMenuItemTriggers.Click
Delete()
End Sub
但我也不喜欢它......看起来不是最有效的解决方案......
我能为此做点什么吗?
提前谢谢
答案 0 :(得分:3)
KeyEventArgs
派生自EventArgs
,因此您可以声明
Private Sub ListBoxDescription_KeyDown(sender As Object, e As EventArgs) Handles ListBoxDescription.KeyDown
如果您确实需要e
作为KeyEventArgs,那么您可以使用
Dim kea = DirectCast(e, KeyEventArgs)
此外,如果您的删除方法具有类似
的签名Sub DeleteThings(sender As Object, e As EventArgs)
然后你可以做
AddHandler ListBoxDescription.KeyDown, AddressOf DeleteThings
AddHandler ToolStripButton1.Click, AddressOf DeleteThings
请注意,使用AddHandler时不需要Handles
子句。
答案 1 :(得分:3)
您必须编写与此类似的公共事件处理程序:
Private Sub CommonEventHandler(sender As Object, e As EventArgs) _
Handles ToolStripMenuItemTriggers.Click, ListBoxDescription.KeyDown
If sender Is ListBoxDescription Then
Dim kea = DirectCast(e, KeyEventArgs)
If kea.KeyData <> Keys.F2 Then Exit Sub
End If
'' Common code
''...
End Sub
工作正常,很难赢得优雅点。您也可以将Common code
移动到单独的私有方法中。通常的建议是在某一天将任何人维护你的代码视为一个知道你住在哪里的杀人狂。