none
Menu dinamico usando MenuStip X ToolStripMenuItem X Propriedade TAG RRS feed

  • Pergunta

  • Pessoal,

    Achei alguns posts sobre menu de acesso dinamico mas ainda nao consegui resolver meu problema. Vou deixar o codigo abaixo para anlise:

    private void CadCliente(object sender, EventArgs e)
            {
            }
    
    
            private void Form1_Load(object sender, EventArgs e)
            {
                MenuStrip menu = new MenuStrip();
    
                ToolStripMenuItem tsmiCadastro = new ToolStripMenuItem("Cadastro");
                ToolStripMenuItem tsmiRelatorio = new ToolStripMenuItem("Relatorio");
    
    
                ToolStripMenuItem tsmiCadastroCliente = new ToolStripMenuItem("Cad Cliente", null, new EventHandler(this.CadCliente));
                tsmiCadastroCliente.Tag = 10;
    
                ToolStripMenuItem tsmiCadastroUsuario = new ToolStripMenuItem("Cad Usuario", null, new EventHandler(this.CadCliente));
                tsmiCadastroUsuario.Tag = 20;
    
                ToolStripMenuItem tsmiRelatorioCliente = new ToolStripMenuItem("Rel Cliente", null, new EventHandler(this.CadCliente));
                tsmiRelatorioCliente.Tag = 30;
    
                ToolStripMenuItem tsmiRelatorioUsuario = new ToolStripMenuItem("Rel Usuario", null, new EventHandler(this.CadCliente));
                tsmiRelatorioUsuario.Tag = 40;
    
    
                tsmiCadastro.DropDownItems.Add(tsmiCadastroCliente);
                tsmiCadastro.DropDownItems.Add(tsmiCadastroUsuario);
    
                tsmiRelatorio.DropDownItems.Add(tsmiRelatorioCliente);
                tsmiRelatorio.DropDownItems.Add(tsmiRelatorioUsuario);
    
    
                menu.Items.Add(tsmiCadastro);
                menu.Items.Add(tsmiRelatorio);
    
                this.Controls.Add(menu);
            }

    O que acontece é que no meu evento:

    private void CadCliente(object sender, EventArgs e){}

    Eu preciso pegar o valor da propriedade TAG dos ToolStripMenuItem

    É possivel fazer isso?

    Grato pela atenção.

    sexta-feira, 24 de fevereiro de 2012 14:55

Todas as Respostas

  • Sim você consegue só altere o código para ficar mais fácil.

    *Nota : Se você não alterar tambem é possível porem você teria que percorrer a lista do Controls até encontrar o componente MenuStrip.

    O código ficaria assim.

    MenuStrip menu;
    private void Form1_Load(object sender, EventArgs e)
    {
        menu = new MenuStrip();
      .
      .
      . //tudo igual
    }
    private void CadCliente(object sender, EventArgs e)
    {
       foreach(var item in menu.Item){
          foreach(var toolStrip in item.DropDownItems){
             //toolStrip.Tag.;
          }
       }
    }

    Não testei propriamente o código mas garanto que funciona com alguma pequenas alteracoes

    domingo, 26 de fevereiro de 2012 13:58
  • Augusto,

    Obrigado pelo retorno. Vou fazer o teste e posto o resultado aqui.

    Valew!!

    segunda-feira, 27 de fevereiro de 2012 11:35
  • Augusto,

    Testando seu codigo nao tive o resultado esperado.

    O que eu preciso neste caso é pegar a propriedade Tag do item do meu que foi clicado.

    Obrigado!

    segunda-feira, 27 de fevereiro de 2012 11:44
  • Pessoal,

    Consegui o resultado esperado fazendo desta maneira:

    private void CadCliente(object sender, EventArgs e)
            {
                var x = (sender as ToolStripMenuItem).Tag.ToString();
                MessageBox.Show(x);
            }

    Mesmo tendo funcionado, esta é a melhor maneira? Posso ter algum tipo de problema com isso? Pode ser melhorado.

    Obrigado pela atenção.

    terça-feira, 28 de fevereiro de 2012 12:38