zephirus Posted October 28, 2007 at 12:06 PM Report Share #143492 Posted October 28, 2007 at 12:06 PM 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. Link to comment Share on other sites More sharing options...
Joca Posted October 28, 2007 at 10:24 PM Report Share #143649 Posted October 28, 2007 at 10:24 PM 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 Link to comment Share on other sites More sharing options...
zephirus Posted October 28, 2007 at 10:48 PM Author Report Share #143657 Posted October 28, 2007 at 10:48 PM 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... Link to comment Share on other sites More sharing options...
zephirus Posted October 29, 2007 at 12:56 AM Author Report Share #143685 Posted October 29, 2007 at 12:56 AM 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? Link to comment Share on other sites More sharing options...
Tiago Salgado Posted October 29, 2007 at 01:55 PM Report Share #143754 Posted October 29, 2007 at 01:55 PM 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 Link to comment Share on other sites More sharing options...
zephirus Posted October 29, 2007 at 11:24 PM Author Report Share #143884 Posted October 29, 2007 at 11:24 PM 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 Não dá. Aparece-me este erro associado à linha "Me.Controls(...": http://img455.imageshack.us/img455/4056/semttulobb8.jpg Link to comment Share on other sites More sharing options...
Joca Posted October 31, 2007 at 10:09 PM Report Share #144366 Posted October 31, 2007 at 10:09 PM 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. Link to comment Share on other sites More sharing options...
zephirus Posted November 1, 2007 at 11:58 PM Author Report Share #144576 Posted November 1, 2007 at 11:58 PM 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. Link to comment Share on other sites More sharing options...
Joca Posted November 3, 2007 at 09:09 PM Report Share #145007 Posted November 3, 2007 at 09:09 PM 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...). Link to comment Share on other sites More sharing options...
zephirus Posted November 3, 2007 at 11:46 PM Author Report Share #145037 Posted November 3, 2007 at 11:46 PM 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. 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