2017-06-16 93 views
0

我在Windows窗体应用程序中使用menuStrip,我想以编程方式将可用端口添加为subMenu。我使用mouseHover来做到这一点,但是它会在每一个动作中添加相同的物品。我的意思是它在每一个动作中都会增加物品。我该如何防止并实现一次添加项目(端口)。如何防止在c#中的MenuStrip中多次添加项目?

这是我的代码;

String[] ports = SerialPort.GetPortNames(); 

private void cOMToolStripMenuItem_MouseHover(object sender, EventArgs e) 
    { 
     foreach (var item in ports) 
     { 
      ToolStripItem subItem = new ToolStripMenuItem(item); 
      cOMToolStripMenuItem.DropDownItems.Add(subItem); 
     } 
    } 
+2

如何在添加它们之前清除所有项目? – Pikoh

+0

你为什么不在表单的'Load'事件上做这件事? – Nino

+0

如果你不清楚代码清除,这里是一个有用的链接:[添加和删除MenuStrip中的ToolStripMenuItem和WinForms中的DropDownItems](https://stackoverflow.com/a/4041900/6741868) –

回答

1
private void cOMToolStripMenuItem_MouseHover(object sender, EventArgs e) 
{ 
    if(cOMToolStripMenuItem.DropDownItems.Count > 0) 
     return; 

    foreach (var item in ports) 
    { 
     ToolStripItem subItem = new ToolStripMenuItem(item); 
     cOMToolStripMenuItem.DropDownItems.Add(subItem); 
    } 
} 

这样,如果已经添加的项目,功能将简单地返回。

0

试试这个

private void cOMToolStripMenuItem_MouseHover(object sender, EventArgs e) 
{ 
    cOMToolStripMenuItem.DropDownItems.Clear(); 
    foreach (var item in ports) 
    { 
     ToolStripItem subItem = new ToolStripMenuItem(item); 
     cOMToolStripMenuItem.DropDownItems.Add(subItem); 
    } 
} 
0

你可以使用LINQ查询,只选择不重复做同样的程序。

string[] uniques = ports.Distinct().ToArray(); 
相关问题