• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pmaster

Click em label

6 mensagens neste tópico

Bom dia a todos.

Pessoal é o seguinte, eu crio algumas labels por código da seguinte maneira:

Dim label As New Label
label.Location = New Point(20, 20)
label.Size = New Size(200, 20)
me.Controls.Add(label)

E até aqui tudo bem, mas eu pretendia criar um evento click nestas labels criadas, mas não sei como fazer.

Eu fiz da seguinte maneira mas não deu resultado.

    Private Sub Label_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        MsgBox("Click em label")
    End Sub

Mas para ver se me faço entender bem é o seguinte, eu crio X labels através de um ciclo, e queria um evento em cada uma delas, será possivel?

Obrigado ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro que é possível ;)

Para fazeres o que pretendes basta adicionares handlers por cada novo objecto.

Esses handlers podem ser endereçados a uma única sub (jogando depois com o sender para saber que objecto disparou o evento e com o e para passares argumentos) ou a subs diferentes.

Transformando o teu exemplo, ficaria algo como:

        For i As Integer = 0 To 10
            Dim Lbl As New Label
            Lbl.Location = New Point(20, 20 + (i * 20))
            Lbl.Size = New Size(200, 20)
            Lbl.Text = "Clica me!"
            AddHandler Lbl.Click, AddressOf Cliques
            Me.Controls.Add(Lbl)
        Next

    Private Sub Cliques(ByVal sender As System.Object, ByVal e As System.EventArgs)
        MsgBox("Clicaste na label localizada em: " & CType(sender, Label).Location.ToString)
    End Sub

Um aparte, não é boa ideia dar como nome de uma instância, o nome do tipo. Como label As Label.

Outro aparte, quando inserires código no post, selecciona-o todo e escolhe a linguagem na combobox no canto superior direito. Dessa forma contribuis para a legibilidade do código no teu post.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Funciona na perfeição  :confused:

Desconhecia por completo que se podia atribuir um evento a um objecto desta maneira.

Agradeço além da ajuda preciosa os apartes, obrigado ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já agora, e se usares a versão 2008, podes utilizar os relaxed delegates, que te permitem fazer isto:

Private Sub Cliques()
        MsgBox("Clicaste na label localizada em: " & CType(sender, Label).Location.ToString)
    End Sub

em vez disto:

Private Sub Cliques(ByVal sender As System.Object, ByVal e As System.EventArgs)
        MsgBox("Clicaste na label localizada em: " & CType(sender, Label).Location.ToString)
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nesse caso sim. Mas num evento com argumentos "não standard" (se é que posso por desta forma), levas ripada (ou banhada).

Relaxed delegates sim, mas só quando dominares o que estás a fazer ou vais ter WTF moments.

Não concordas jpaulino?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora