我有一个冗长的上下文菜单,我想为这些项添加一些视觉效果(不,我不想制作新的渲染器),所以我只为其中一个列表项创建了一个MouseEnter和MouseLeave事件。 现在我想将其扩展到所有上下文菜单项,而不为每个项目制作两个单独的事件......
这是我目前所拥有的一个简短例子:
Private Sub NewMenuItems_MouseEnter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewMenuItem1.MouseEnter, NewMenuItem2.MouseEnter, etc.
MenuItem.ForeColor = Color.Red
End Sub
Private Sub NewMenuItems_MouseLeave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NewMenuItem1.MouseLeave, NewMenuItem2.MouseLeave
MenuItem.ForeColor = Color.Cyan
End Sub
每个项目唯一不同的是“.Forecolor”之前的内容。 如何同时为所有项目进行此项工作?
答案 0 :(得分:7)
如果MenuItem
的所有实例都使用相同的事件处理程序,那么您可以使用sender
参数来区分实际调用它的那个,该参数应该引用调用该事件的实例。所以只需将sender
投射到MenuItem
,这就是您正在寻找的那个。
请注意,当然,你应该始终小心铸造。在这种情况下,您需要确保它只是一个MenuItem
,它会调用此处理程序,否则您将希望在另一个对象调用它时使用强制转换进行一些错误检查/处理。