Как предотвратить добавление элемента более одного раза в MenuStrip в C#?

Я использую menuStrip в приложении Windows Form и хочу программно добавить доступные порты в качестве подменю. Для этого я использовал mouseHover, но он добавляет одни и те же элементы в каждое действие перемещения. Я имею в виду, что он добавляет элемент в каждое действие перемещения. Как я могу предотвратить это и добиться добавления элементов (портов) один раз.

Вот мой код;

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

3 ответа

Решение
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);
    }
}

Таким образом, если элементы уже добавлены, функция просто вернется.

Попробуй это

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

Вы можете использовать запрос LINQ только для выбора уникальных и выполнить ту же процедуру.

string[] uniques = ports.Distinct().ToArray();
Другие вопросы по тегам