VB.NET如何使1个子项适用于多个项目?

Roy*_*yce 2 vb.net vb6 contextmenu

我有一个冗长的上下文菜单,我想为这些项添加一些视觉效果(不,我不想创建一个新的渲染器),所以我只为其中一个列表项创建了一个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
Run Code Online (Sandbox Code Playgroud)

每个项目唯一不同的是".Forecolor"之前的内容.如何同时为所有项目进行此项工作?

Dav*_*vid 7

如果所有实例MenuItem都使用相同的事件处理程序,那么您可以使用sender参数来区分实际调用它的那个实例,该参数应该引用调用该事件的实例.所以只需投入senderMenuItem那个,那就是你要找的那个.

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