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

PowerShell WinForm ListBox鼠标悬停动态Tooltip实现求助

为PowerShell WinForms ListBox的每个项设置动态鼠标悬停Tooltip

我来帮你搞定这个动态Tooltip的问题!你已经写对了核心的事件处理逻辑,只差最后一步把它绑定到ListBox的MouseMove事件上。另外注意下代码里的变量名要统一(你一会儿用$listbox_groupe_import,一会儿用$listBox_groupe,容易出错),我给你整理了完整的可运行示例:

# 创建主窗体
$form = New-Object System.Windows.Forms.Form
$form.Text = "ListBox动态Tooltip示例"
$form.Size = New-Object System.Drawing.Size(400, 300)

# 创建ListBox并填充数据(替换成你的Get-ListboxGroup返回值)
$listbox_groupe_import = New-Object System.Windows.Forms.ListBox
$listbox_groupe_import.Location = New-Object System.Drawing.Point(20, 20)
$listbox_groupe_import.Size = New-Object System.Drawing.Size(350, 230)
# 这里用示例数据,实际替换为你的Get-ListboxGroup结果
$tableGroups = Get-ListboxGroup
$listbox_groupe_import.Items.AddRange($tableGroups)
$form.Controls.Add($listbox_groupe_import)

# 创建Tooltip对象
$obj_infobulle = New-Object System.Windows.Forms.ToolTip
$obj_infobulle.InitialDelay = 100
$obj_infobulle.ReshowDelay = 100

# 定义MouseMove事件处理器
$listboxGroupe_MouseMove = [System.Windows.Forms.MouseEventHandler]{
    # 根据鼠标位置获取对应项的索引
    $index = $listbox_groupe_import.IndexFromPoint($_.Location)
    
    if ($index -ne -1) {
        # 动态设置Tooltip文本:如果是自定义对象,可替换为具体属性(比如$item.Description)
        $tooltipText = $listbox_groupe_import.Items[$index].ToString()
        $obj_infobulle.SetToolTip($listbox_groupe_import, $tooltipText)
    } else {
        # 鼠标不在任何项上时清空Tooltip
        $obj_infobulle.SetToolTip($listbox_groupe_import, "")
    }
}

# 把事件处理器绑定到ListBox的MouseMove事件
$listbox_groupe_import.Add_MouseMove($listboxGroupe_MouseMove)

# 可选:添加MouseLeave事件,鼠标完全离开ListBox时清空Tooltip
$listboxGroupe_MouseLeave = [System.EventHandler]{
    $obj_infobulle.SetToolTip($listbox_groupe_import, "")
}
$listbox_groupe_import.Add_MouseLeave($listboxGroupe_MouseLeave)

# 显示窗体
$form.ShowDialog() | Out-Null

关键细节说明

  1. 事件绑定核心:$listbox_groupe_import.Add_MouseMove($listboxGroupe_MouseMove)这行代码是关键——它把你写的事件处理器和ListBox的MouseMove事件关联起来,当鼠标在ListBox上移动时就会自动触发逻辑。
  2. 索引获取方法:IndexFromPoint($_.Location)是WinForms ListBox的内置方法,能将鼠标坐标直接转换成对应项的索引,返回-1表示鼠标不在任何项上。
  3. 自定义对象适配:如果你的Get-ListboxGroup返回的是自定义对象(不是字符串),记得把ToString()改成对象的具体属性,比如$listbox_groupe_import.Items[$index].TableCount或者$listbox_groupe_import.Items[$index].Description,这样Tooltip能显示更有价值的信息。

内容的提问来源于stack exchange,提问作者Kishiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:47:41