Usuário com melhor resposta
Criar componente em tempo de execução

Pergunta
-
Boa noite !
Estou com uma dúvida que pode parecer besta, mas não consegui pensar num modo (ou até pesquisar) para o que desejo.
No sistema que estou criando, o usuário terá um botão para criar um PictureBox com uma X imagem dentro.
Então ele clica e em tempo real vai criar essa PictureBox com a imagem inserida.
Até aí tudo bem.
Porém cada PictureBox criado, terá um evento de ação. Já consegui conselhar isso, só que o problema é quando tem 2 ou mais componentes criados.
Dá conflito de ações, pois os dois tem o mesmo nome de objeto
Preciso de uma forma que ele crie componentes com "nome sequencial". Tipo:
PictureBox-A (E seus respectivos Handles)
Se houver o A já, então cria o B.. e assim vai.
Preciso disso, para que cada ação de cada picturebox seja destinado ao seu handle (embora ser a mesma ação, elas tem de agir independente).
Alguém tem uma idéia? Posso criar funções para receber o nome do PictureBox ativo e etc, tal. Mas o maior problema é que se mantém o mesmo nome de objeto, não tem como eu filtrar qual está ativo.
Obrigado!
Att
Alan
Respostas
-
Olá!
Problema resolvido... segue abaixo:
Public WithEvents PB As New PictureBox() Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click PB = New PictureBox() Me.Controls.Add(PB) AddHandler PB.MouseClick, AddressOf MyPicClicked_Click End Sub Private Sub MyPicClicked_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Messagebox.show("Voce clicou no PB " & sender.Text.tostring) End Sub
Muito obrigado Andre!
Abç
Alan- Marcado como Resposta Alan.Bernardes quarta-feira, 8 de agosto de 2012 13:52
Todas as Respostas
-
Alan,
Se o código a ser executado no evento é o mesmo para todos os PictureBoxes, a maneira que você está fazendo é a correta (ligar todos os PictureBoxes criados com o mesmo handler)... A única coisa que você tem que se atentar é, dentro do event handler, ao invés de trabalhar com um PictureBox específico, utilize o parâmetro sender (fazendo um cast para PictureBox) e você saberá qual foi o PictureBox que disparou aquele handler...
André Alves de Lima
Microsoft MVP - Client App Dev
Visite o meu site: http://www.andrealveslima.com.br
Me siga no Twitter: @andrealveslima -
Agradeço a Resposta Andre!
Estou tentando e ainda não obtive um resultado esperado.. vou postar parte do código, e você me diz se está correto.
O código está apenas em criar um objeto e exibir mensagem à ele. Só que como falei, quero que isso seja um evento para todos os objetos criados.
Public WithEvents PB As New PictureBox() Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click PB = New PictureBox() Me.Controls.Add(PB) End Sub Private Sub MyPicClicked_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PB.MouseClick Messagebox.show("Voce clicou no PB " & sender.Text.tostring) End Sub
Só que a ação sempre está ao PB, o objeto é instanciado para PB, e não para um novo objeto com um nome diferente, para assim eu ter a ação individual de cada.
Alguma idéia?
Obrigado!
Alan -
Olá!
Problema resolvido... segue abaixo:
Public WithEvents PB As New PictureBox() Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click PB = New PictureBox() Me.Controls.Add(PB) AddHandler PB.MouseClick, AddressOf MyPicClicked_Click End Sub Private Sub MyPicClicked_Click(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Messagebox.show("Voce clicou no PB " & sender.Text.tostring) End Sub
Muito obrigado Andre!
Abç
Alan- Marcado como Resposta Alan.Bernardes quarta-feira, 8 de agosto de 2012 13:52