Jump to content

Click em label


pmaster
 Share

Recommended Posts

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 😉

Link to comment
Share on other 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.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other 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
Link to comment
Share on other 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?

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.