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

zephirus

[vb.net 2005] click em botão com index

10 mensagens neste tópico

Olá a todos.

Tenho uma dúvida que provavelmente até é simples.

Eu programava em VB6 e era possível fazer arrays de controls. No vb.net isso não é possível e já consegui dar a volta à questão MAS só em parte.

A minha dúvida agora é a seguinte:

Como exemplo, tenho 3 labels de nome label1, label2 e label3

Consigo por exemplo atribuir-lhes o valor text através de um if mas o que eu queria agora era, ao clicar num desses labels, que me aparecesse uma msgbox com o nome desse label. Ora, o que me aparece agora são 3 "Sub label#_Click(ByVal.....". Como é que faço para programar apenas uma vez e usar os indexs?

Se calhar fui confuso, peço desculpa. Qualquer ajuda é bem vinda.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Private Sub Label1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) _
    Handles Label1.Click, Label2.Click, Label3.Click

        'o que eu queria agora era, ao clicar num desses labels, 
        'que me aparecesse uma msgbox com o nome desse label:
        Dim lbl As New Label
        lbl = sender

        MessageBox.Show("Voce clicou na " & lbl.Text)


    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epá, que maravilha! É isso mesmo. Hoje estive grande parte do dia a tentar perceber como ter os arrays. Muito obrigado!

Já agora e para perceber bem o código, vê se estou a interpretar tudo bem:

Pelo que percebi, depois do Handles tenho de colocar à mão todos os controls que quero que estejam associados ao click no label1, correcto?

E e sender é o nome do controle onde carreguei, certo? Por acaso, isto não percebi muito bem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estava a tentar não chatear com mais uma questão mas depois de tanto procurar lá terá de ser.

Tendo eu os 3 labels, label1, label2 e label3, quero ao carregar num botão, que ele me mude a cor de fundo de 2 dos 3 botões, mas aleatoriamente.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Randomize()
        For i As Integer = 1 To 2 'no caso de 2 botoes
              Me.Controls("label" & Int(Rnd() * 50) + 1).BackColor = Color.LightGreen
        Next
End Sub

Esse código não funciona mas penso que não andarei longe. O que é que falta ai?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta assim:

Dim r as Random = new Random
For i As Integer = 1 To 2 'no caso de 2 botoes
              Me.Controls("label" & r.Next(1,4)).BackColor = Color.LightGreen
Next

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Caro zephirus...

...para a tua pergunta "Pelo que percebi, depois do Handles tenho de colocar à mão todos os controls que quero que estejam associados ao click no label1, correcto?" - A resposta é: Neste exemplo, sim. Caso tenhas reparado o exemplo que te dei exibe o conteúdo da label (pois, usei a propriedade TEXT). Caso quisesses mesmo no nome da label deves alterar, no código que te indiquei, a propriedade TEXT para NAME.

...para a tua pergunta "E e sender é o nome do controle onde carreguei, certo? Por acaso, isto não percebi muito bem..." - A resposta é: http://visualbasic.about.com/od/learnvbnet/a/eventhandler.htm

...para a tua pergunta "..quero ao carregar num botão, que ele me mude a cor de fundo de 2 dos 3 botões, mas aleatoriamente." - Não fiquei seguro sobre se realmente queres mudar a cor de fundo dos botões ou, se te referes à alteração da cor das labels, de qualquer modo, julgo que se fizeres download deste exemplo (http://www.vb-helper.com/howto_net_random_colors.html) ele poderá ser uma mais valia para ti.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá Joca. Obrigado pelas explicações. Ajudaste imenso. O que eu queria mesmo era alterar a cor das labels e por lapso escrevi botões. Já o consigo fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
O que eu queria mesmo era alterar a cor das labels e por lapso escrevi botões. Já o consigo fazer.

Seria bom explicares como o fizeste, para outros que tenham a mesma dúvida, também o saberem quando consultam este tópico (Isto se quiseres explicar...).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens toda a razão. Então aqui fica:

        Randomize()
        For i As Integer = 1 To 50
            listadenumeros(i - 1).BackColor = defaultcolor
        Next
        listatemporaria.Items.Clear()
        For i As Integer = 1 To 50
            listatemporaria.Items.Add(i)
        Next
        Dim r As Integer
        For i As Integer = 1 To Int(RandomNumBox.Text)
            r = Int((listatemporaria.Items.Count - 1 + 1) * Rnd() + 1)
            listadenumeros(listatemporaria.Items(r - 1) - 1).BackColor = Color.LightGreen
            listatemporaria.Items.RemoveAt(r - 1)
        Next
Explicação:

listadenumeros é uma lista que criei, com 50 números:

Dim listadenumeros As List(Of Label) = New List(Of Label)
 

O primeiro passo foi pôr a cor default em todos os labels;

A listatemporaria é uma listbox normalíssima. Primeiro limpo-a e depois acrescento os 50 números de 1 a 50;

A última parte do código é simples:

1. Ciclo de 1 até ao número de labels que quero mudar a cor (RandomNumBox.Text)

2. Crio o index que quero aleatoriamente (r) e mudo o label correpondente a esse index

3. Retiro o número da lista para que no próximo ciclo ele apenas crie um index aleatório dos números que sobraram;

PS: já agora explico outra coisa que não me ocorreu ao início. Da primeira vez que escrevi o código, fiz um IF para saber se o label que calhou mudar de cor, já estava com a cor mudada ou não. Se estivesse, fazia random de novo. O problema é que se houver 100 labels e eu quiser mudar a cor de 99 aleatoriamente, o código enrola-se nos IF's. Isto não acontece se eu retirar o próximo label de uma lista onde só constam labels que possam ser mudados de cor.

Confuso? É da hora! Qualquer dúvida, digam.

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