pmaster Posted September 24, 2009 at 10:57 AM Report Share #288450 Posted September 24, 2009 at 10:57 AM 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 More sharing options...
ribeiro55 Posted September 24, 2009 at 11:17 AM Report Share #288452 Posted September 24, 2009 at 11:17 AM 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 More sharing options...
pmaster Posted September 24, 2009 at 12:18 PM Author Report Share #288458 Posted September 24, 2009 at 12:18 PM Funciona na perfeição 😕 Desconhecia por completo que se podia atribuir um evento a um objecto desta maneira. Agradeço além da ajuda preciosa os apartes, obrigado 😉 Link to comment Share on other sites More sharing options...
jpaulino Posted September 24, 2009 at 12:42 PM Report Share #288461 Posted September 24, 2009 at 12:42 PM 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 More sharing options...
pmaster Posted September 24, 2009 at 12:57 PM Author Report Share #288462 Posted September 24, 2009 at 12:57 PM Desconhecia isso, e o efeito é o mesmo? Link to comment Share on other sites More sharing options...
ribeiro55 Posted September 24, 2009 at 01:08 PM Report Share #288464 Posted September 24, 2009 at 01:08 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now