Как предотвратить добавление элемента более одного раза в 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();