VB.NET中如何为动态创建的ToolStripButton添加鼠标悬停事件?
解决方案
1. 绑定鼠标悬停相关事件
在你创建每个动态ToolStripButton并绑定Click事件的位置,额外添加MouseEnter(鼠标进入按钮时触发)和MouseLeave(鼠标离开按钮时触发)的事件绑定,示例代码如下:
Dim btnBilling As New ToolStripButton With btnBilling 'Set properties .BackgroundImage = My.Resources.ToolBarBkGrd2 .DisplayStyle = ToolStripItemDisplayStyle.ImageAndText .TextImageRelation = TextImageRelation.ImageBeforeText .Image = My.Resources.Billing .Font = New Font("Calibri", 8.25, FontStyle.Bold) .Text = "Billing" & vbNewLine & "Info" End With '绑定点击事件 AddHandler btnBilling.Click, AddressOf BtnBilling_Click '绑定鼠标进入事件(切换悬停背景) AddHandler btnBilling.MouseEnter, AddressOf ToolStripButton_MouseEnter '绑定鼠标离开事件(恢复原背景) AddHandler btnBilling.MouseLeave, AddressOf ToolStripButton_MouseLeave 'Add button to toolstrip ToolStrip1.Items.Add(btnBilling)
2. 编写通用事件处理方法
因为你有18个按钮,无需为每个按钮单独写事件逻辑,编写一个通用处理方法即可:
'鼠标进入按钮时切换背景图 Private Sub ToolStripButton_MouseEnter(sender As Object, e As EventArgs) Dim targetBtn As ToolStripButton = DirectCast(sender, ToolStripButton) targetBtn.BackgroundImage = My.Resources.ToolBarBkGrd3 End Sub '鼠标离开按钮时恢复原背景图 Private Sub ToolStripButton_MouseLeave(sender As Object, e As EventArgs) Dim targetBtn As ToolStripButton = DirectCast(sender, ToolStripButton) targetBtn.BackgroundImage = My.Resources.ToolBarBkGrd2 End Sub
补充说明
- 通过
DirectCast将事件触发源sender转换为ToolStripButton,即可对当前触发事件的按钮进行背景图修改 - 所有18个动态创建的按钮都可复用这两个事件方法,只需在创建按钮时添加对应的
AddHandler绑定 - 由于菜单位于始终可见的父窗体,这些事件逻辑不会受子窗体的关闭/切换影响,能正常响应鼠标动作
内容的提问来源于stack exchange,提问作者K3JAE
相关产品推荐
相关产品推荐

