C# 为动态 menuStrip 项目分配单击操作

标签 c# winforms menustrip

我正在构建一个程序,该程序依赖于读取系统上可用的串行端口并填充 menuStrip 项。我已经能够填充 menuStrip 子菜单,但我一直不知道如何将单击事件添加到动态填充列表中。我的代码如下:

    public void getPorts()
    {
        int count = 0;
        string[] ports = SerialPort.GetPortNames();
        foreach(string port in ports)
        {
            //MessageBox.Show("Serial Port " + port + " found!");
            ToolStripItem subItem = new ToolStripMenuItem(port);
            portMenuItem.DropDownItems.Add(port);
            count += 1;
        }
    }

我觉得有些东西需要进入foreach循环,但我一直无法找到它。任何帮助都会很棒!

最佳答案

只需为您要添加的每个菜单项分配处理程序:

ToolStripItem subItem = new ToolStripMenuItem(port);
subItem.Click += MenuItem_Click;
// you should add menu item to some menu here

您可以通过将事件发送者对象转换为菜单项类型来获取在处理程序中单击的项目:

private void MenuItem_Click(object sender, EventArgs e)
{
    var menuItem = (ToolStripMenuItem)sender;
    var port = menuItem.Text;
    // ...
}

更新 - 将项目添加到ToolStripDropDownButton:

foreach(string port in ports)
{
    portMenuItem.DropDownItems.Add(port).Click += MenuItem_Click; // see definition above
}

关于C# 为动态 menuStrip 项目分配单击操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42964561/

相关文章:

c# - DataGridView 列显示虽然标记为不可见

c# - 关于dataGridView的Row和Column Headers的问题

c# - 在 Windows 窗体中使用 Windows 7 风格的菜单条

c# - 找不到 System.Xml.Xpath

c# - Firefox 中的 ASP.NET 图表呈现问题

c# - 转换格式异常处理

c# - 我已经安装了VS 2017。但是安装程序找不到它,导致我无法更新和卸载它们

c# - 从.Hide() 改成.Show() 的窗体无法最大化,为什么?

c# - C#如何调用menustrip item的点击事件函数?