我正在构建一个程序,该程序依赖于读取系统上可用的串行端口并填充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
}