2017-06-16 3 views
0

J'utilise menuStrip dans l'application de formulaire Windows et je souhaite ajouter des ports disponibles en tant que sous-menu par programme. J'ai utilisé mouseHover pour faire ceci mais il ajoute les mêmes articles dans chaque action d'hoving. Je veux dire qu'il ajoute l'article dans chaque action d'hoving. Comment puis-je empêcher cela et parvenir à ajouter des éléments (ports) une fois.Comment éviter d'ajouter un élément plus d'une fois à MenuStrip dans C#?

Voici mon code;

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

Qu'en est-il effacer tous les éléments avant de les ajouter? – Pikoh

+0

pourquoi ne faites-vous pas cela sur l'événement 'Load' du formulaire? – Nino

+0

Si vous n'êtes pas sûr du code d'effacement, voici un lien utile: [Ajout et suppression de ToolStripMenuItem à partir de MenuStrip et DropDownItems dans WinForms] (https://stackoverflow.com/a/4041900/6741868) –

Répondre

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); 
    } 
} 

De cette façon, si les éléments sont déjà ajoutés, la fonction retourne simplement.

0

essayer cette

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

Vous pouvez utiliser une requête LINQ seulement sélectionner les et faire la uniques même procédure.

string[] uniques = ports.Distinct().ToArray();