Dinamicamente adicionar itens a um menu de contexto & conjunto de ações Clique
-
03-07-2019 - |
Pergunta
Eu tenho uma lista de strings que é regenerado a cada 5 segundos. Eu quero criar um menu de contexto e definir seus itens dinamicamente usando esta lista. O problema é que eu não tenho mesmo uma idéia de como fazer isso e gerenciar a ação Clique para cada item gerado (que deve usar o mesmo método com diferentes parâmetros DoSomething ( "item_name")).
Como devo fazer isso?
Obrigado pelo seu tempo. Com os melhores cumprimentos.
Solução
Assim, você pode limpar os itens do menu de contexto com:
myContextMenuStrip.Items.Clear();
Você pode adicionar um item chamando:
myContextMenuStrip.Items.Add(myString);
O menu de contexto tem um evento ItemClicked. O manipulador poderia ser semelhante a isso:
private void myContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
DoSomething(e.ClickedItem.Text);
}
Parece funcionar OK para mim. Deixe-me saber se eu entendi mal a sua pergunta.
Outras dicas
Outra alternativa usando um objeto ToolStripMenuItem
:
//////////// Create a new "ToolStripMenuItem" object:
ToolStripMenuItem newMenuItem= new ToolStripMenuItem();
//////////// Set a name, for identification purposes:
newMenuItem.Name = "nameOfMenuItem";
//////////// Sets the text that will appear in the new context menu option:
newMenuItem.Text = "This is another option!";
//////////// Add this new item to your context menu:
myContextMenuStrip.Items.Add(newMenuItem);
Dentro do evento ItemClicked
do seu myContextMenuStrip
, você pode verificar qual opção foi escolhida ( com base na propriedade de nome do item de menu )
private void myContextMenuStrip_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
ToolStripItem item = e.ClickedItem;
//////////// This will show "nameOfMenuItem":
MessageBox.Show(item.Name, "And the clicked option is...");
}