none
Criando evento dinâmico RRS feed

  • Pergunta

  • Olá pessoal, seguinte,
    Estou criando um botão em tempo de execução e gostaria que ele executasse um método quando o usuário clicar nele.
    Para isso, estou usando este código

    protected void CriarBotao(object sender, EventArgs e)
            {
                Button botao = new Button();
                botao.Text = "somente um teste";
                botao.Click += new EventHandler(CriarBotao);
                this.Page.Form.Controls.AddAt(0,botao);
            }

    Para o primeiro disparo do evento eu criei um botão e no evento click adicionei o método, assim:

    protected void Button1_Click(object sender, EventArgs e)
            {
                CriarBotao(sender, e);
            }

    Quando o button1 é clicado ele cria um botão, ao clicar no botão criado ele simplesmente desaparece.

    Alguém ja passou por isso?
    quinta-feira, 11 de março de 2010 00:45

Respostas

  • Cara fiz uma coisinha rapida aqui mas tem que melhorar.
    bom, bom nao esta mas deve funcionar e vc melhora ai
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["botoes"] != null)
                    for (int i = 0; i < (Int32)Session["botoes"]; i++)
                    {
                        CriarBotao();
                    }
            }
    
            private void AddBotao()
            {
                Session["botoes"] = (Int32)(Session["botoes"] ?? 0) + 1;
            }
    
            protected void CriarBotao()
            {
                Button botao = new Button();
                botao.Text = "somente um teste";
                botao.Click += new EventHandler(botao_Click);
                Form.Controls.Add(botao);
            }
    
            void botao_Click(object sender, EventArgs e)
            {
                AddBotao();
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                CriarBotao();
                AddBotao();
            }
    
    


    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    • Marcado como Resposta Rique Costa terça-feira, 15 de março de 2011 17:50
    quinta-feira, 11 de março de 2010 15:50

Todas as Respostas

  • é web? se for é isso mesmo. Faz parte do ciclo de criacao. vc precisa criar em todo postback
    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    quinta-feira, 11 de março de 2010 02:07
  • Sim Gustavo, é web.

    O resultado esperado é que ao clicar no botão criado ele criasse mais um botão, e assim sucessivamente.

    Entretanto, como citei acima o botão desaparece da página.

    Existe alguma técnica pra isso?
    quinta-feira, 11 de março de 2010 10:19
  • Cara fiz uma coisinha rapida aqui mas tem que melhorar.
    bom, bom nao esta mas deve funcionar e vc melhora ai
            protected void Page_Load(object sender, EventArgs e)
            {
                if (Session["botoes"] != null)
                    for (int i = 0; i < (Int32)Session["botoes"]; i++)
                    {
                        CriarBotao();
                    }
            }
    
            private void AddBotao()
            {
                Session["botoes"] = (Int32)(Session["botoes"] ?? 0) + 1;
            }
    
            protected void CriarBotao()
            {
                Button botao = new Button();
                botao.Text = "somente um teste";
                botao.Click += new EventHandler(botao_Click);
                Form.Controls.Add(botao);
            }
    
            void botao_Click(object sender, EventArgs e)
            {
                AddBotao();
            }
    
            protected void Button1_Click(object sender, EventArgs e)
            {
                CriarBotao();
                AddBotao();
            }
    
    


    Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/
    • Marcado como Resposta Rique Costa terça-feira, 15 de março de 2011 17:50
    quinta-feira, 11 de março de 2010 15:50