You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:01:57