2

我有一个冗长的上下文菜单,我想为项目添加一些视觉效果(不,我不想制作新的渲染器),所以我只是为其中一个列表项制作了 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”之前的内容。我如何使这项工作同时适用于所有项目?

4

1 回答 1

7

如果所有实例MenuItem都使用相同的事件处理程序,那么您可以使用sender参数区分哪个实例实际调用了它,该参数应该引用调用事件的实例。因此,只需sender转换为 a MenuItem,这就是您要寻找的那个。

请注意,当然,您应该始终小心投射。在这种情况下,您需要确保它只是MenuItem调用此处理程序的一个,否则您需要在另一个对象调用它的情况下对强制转换进行一些错误检查/处理。

于 2013-01-04T02:18:28.207 回答