MENUSTRIP PARTE DINÂMICA PARTE NORMAL

LUIS.HERRERA 05/12/2014 15:35:58
#443019
Boa tarde!
Surgiu uma necessidade de em uma das ramificações do menu strip, os itens serem dinâmicos em função do cadastro de uma tabela do banco.
O que já fiz:
- Essa tabela está limitada a 10 registros (itens do menu)
- Na ramificação do menu que vou usar esses itens, já criei 10 itens com nomes Grupo1, Grupo2, Grupo3....Grupo10 e coloquei todos com Visible = false (ocultos)

A ramificação do menu é mais ou menos assim:
Menu Principal
Segundo nível
Terceiro nível
Quarto nível (menu que conterá os itens da tabela)
Grupo1
Grupo2
Grupo3
.....

Dúvida:
1) Como devo fazer para que a cada acesso nesse menu (apenas o Quarto Nível - momento que os itens desse menu são exibidos), os itens sejam atualizados com os valores atuais da tabela (texto do item) ? Isso porque sendo multiusuário, essa tabela pode ser editada e novos itens incluídos ou editados e assim qualquer usuário com permissão teria os dados atualizados ao abrir esse submenu.

- essa atualização seria incluir no item o texto correspondente do registro da tabela ex: De: Grupo1 para texto do primeiro registro, etc.....
- tendo o item alterado, também torá-lo Visible = true
- o registro sendo inativado na tabela, também seria oculto no menu

Nota: Já deixei tudo codificado em cada item com formulários de mesmo nome frmGrupo1.cs frmGrupo2.cs etc.. e assim a codificação funcionará corretamente o mesmo com a tabela correspondente.
FFCOUTO 05/12/2014 16:11:05
#443021
Resposta escolhida
LUIS,

Na minha opinião a melhor forma seria você usar a propriedade DropDownItems. Ela é uma collection que, obviamente, contém os sub-menus.
De forma simples você daria um Clear() e depois uma carga apenas com os dados da tabela que são válidos.

menuQuartoNivel.DropDownItems.Clear();
DataReader dr = command.ExecuteReader([Ô]SELECT texto FROM sua_tabela WHERE (ativo = 1);[Ô]);
while (dr.Read())
{
menuQuartoNivel.DropDownItems.Add(new ToolStripMenuItem(dr[[Ô]texto[Ô]], imagem, OnItemMenuQuartoNivelClick));
}


onde:
imagem = qualquer imagem que será usada como ícone do menu ou null para nenhuma.
OnItemMenuQuartoNivelClick = rotina usada para tratar o evento click, onde será chamado seus WinForms.

Qualque dúvida poste.
Tópico encerrado , respostas não são mais permitidas