2017-06-16 140 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(); 
相關問題