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

如何从DataGrid字符串列表动态生成ContextMenu菜单项?

动态生成WinForms上下文菜单并绑定网络驱动器点击事件

1. 修正剩余的AddRange使用问题

你当前代码里的AddRange($menuEntry)仍不符合API要求:MenuItems.AddRange()需要传入MenuItem数组,单个菜单项应该用Add()方法,显式调用更清晰且能避免潜在问题:

foreach ($row in $dataGrid.Rows){
    $nameTag = $row.Cells[$DATAGRID_COLUMN_NAME].Value
    if ($nameTag -ne $null){
        $menuEntry = New-Object System.Windows.Forms.MenuItem
        $menuEntry.Text = $nameTag
        # 改用Add()添加单个菜单项
        $Main_Tool_Icon.ContextMenu.MenuItems.Add($menuEntry)
    }
}

2. 绑定菜单项的点击事件

要实现点击菜单项打开对应网络驱动器,需为每个MenuItem绑定Click事件处理脚本块。注意循环中变量作用域问题,通过脚本块参数捕获当前菜单项的文本值,避免所有菜单项引用最后一个变量值:

foreach ($row in $dataGrid.Rows){
    $nameTag = $row.Cells[$DATAGRID_COLUMN_NAME].Value
    if ($nameTag -ne $null){
        $menuEntry = New-Object System.Windows.Forms.MenuItem
        $menuEntry.Text = $nameTag
        
        # 绑定点击事件,通过$sender获取当前触发事件的菜单项
        $menuEntry.Add_Click({
            param($sender, $e)
            $drivePath = $sender.Text
            # 调用资源管理器打开目标路径
            Start-Process explorer.exe -ArgumentList $drivePath
        })
        
        $Main_Tool_Icon.ContextMenu.MenuItems.Add($menuEntry)
    }
}

3. 更优实现:使用ContextMenuStrip替代旧的ContextMenu

ContextMenu是.NET Framework早期控件,推荐使用功能更丰富的ContextMenuStrip(支持图标、灵活样式、更完善的事件体系),实现更简洁高效:

# 创建ContextMenuStrip替代旧的ContextMenu
$contextMenuStrip = New-Object System.Windows.Forms.ContextMenuStrip
$Main_Tool_Icon.ContextMenuStrip = $contextMenuStrip

# 动态添加网络驱动器菜单项
foreach ($row in $dataGrid.Rows){
    $nameTag = $row.Cells[$DATAGRID_COLUMN_NAME].Value
    if ($nameTag -ne $null){
        # 直接创建并添加菜单项,同时绑定点击事件
        $menuItem = $contextMenuStrip.Items.Add($nameTag)
        $menuItem.Add_Click({
            Start-Process explorer.exe $this.Text
        })
    }
}

# 添加分隔线
$contextMenuStrip.Items.Add("-")

# 添加"Edit"菜单项并绑定事件
$editItem = $contextMenuStrip.Items.Add("Edit")
$editItem.Add_Click({
    # 此处添加显示主窗体的逻辑
    $mainForm.Show()
})

ContextMenuStrip的核心优势:

  • 内置分隔线创建逻辑,无需手动处理
  • 支持自定义图标、样式和布局
  • 事件模型更清晰,性能更优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:33:31