SIMPLIFICAR CODIGO
Boa noite pessoal.
Como faço para simplificar o seguinte código?
If Imagem.Text = [Ô]1[Ô] Then
Panel1.BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
ElseIf Imagem.Text = [Ô]2[Ô] Then
Panel2.BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
ElseIf Imagem.Text = [Ô]3[Ô] Then
Panel3.BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
End If
No meu Form tenho 100 Panels divididos em 10 TabPages, entao teria que repetir a mesma linha de código 100 vezes!
Tentei definir uma variável más não consegui!
Dim T as String
T = Imagem.Text
Panel(T).BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
Desde já agradeço....
Como faço para simplificar o seguinte código?
If Imagem.Text = [Ô]1[Ô] Then
Panel1.BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
ElseIf Imagem.Text = [Ô]2[Ô] Then
Panel2.BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
ElseIf Imagem.Text = [Ô]3[Ô] Then
Panel3.BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
End If
No meu Form tenho 100 Panels divididos em 10 TabPages, entao teria que repetir a mesma linha de código 100 vezes!
Tentei definir uma variável más não consegui!
Dim T as String
T = Imagem.Text
Panel(T).BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
Desde já agradeço....
Não sei muito sobre as coleções de controles de interface do .Net, mas isso aqui dá pra isolar os painels e tratá-los individualmente:
foreach (Control x in this.Controls)
{
if (x.GetType().Equals(typeof(Panel)))
MessageBox.Show(x.Name);
}
vc não conseguiu abrir a variavel porque ela não pode ser string e sim integer
olha para simplificar eu colocaria um panel, mudaria a propriedade index para 0 (zero), depois copiaria e colaria no form fazendo um array do objeto, assim o código ficaria simplesmente assim:
e pronto
se vc marcar 1,2 ou 3 ele vai abrir o panel especifico
olha para simplificar eu colocaria um panel, mudaria a propriedade index para 0 (zero), depois copiaria e colaria no form fazendo um array do objeto, assim o código ficaria simplesmente assim:
Panel(CInt(Imagem.txt)).BackgroundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
e pronto
se vc marcar 1,2 ou 3 ele vai abrir o panel especifico
Obrigado pela atenção...
Leandro, fiz umas adaptações ao seu código e funcionou parcialmente, carrega as imagens certinho, porém de trás pra frente!
Se eu digitar 1, carrega a imagem no Panel 100, se eu digitar 100, carrega a imagem no Panel 1!
Marcelo, entendi perfeitamente a lógica do seu código, porém não estou achando a propriedade Index para poder alterar!
Estou usando o VB 2010 Express!
Mais uma vez agradeço pela atenção...
Abraço...
Leandro, fiz umas adaptações ao seu código e funcionou parcialmente, carrega as imagens certinho, porém de trás pra frente!
Se eu digitar 1, carrega a imagem no Panel 100, se eu digitar 100, carrega a imagem no Panel 1!
Marcelo, entendi perfeitamente a lógica do seu código, porém não estou achando a propriedade Index para poder alterar!
Estou usando o VB 2010 Express!
Mais uma vez agradeço pela atenção...
Abraço...
Citação::
Estou usando o VB 2010 Express!
VB2010 é NET...
Por que postou em VB/VBA ???
Citação:':
:
Estou usando o VB 2010 Express!
VB2010 é NET...
Por que postou em VB/VBA ???
Não posso dizer que é culpa dele, existem inúmeros tópicos aqui que são vb.net porém por falta de conhecimento dos frequentadores do forum a perguntas vem parar em vb/vba, que é diferente, quando houve a alteração do site, eu até sugeri que na barra de menu fosse feito uma alteração, porém não tive resposta, positiva ou negativa, mas isso não interessa, o que sugeri foi alterar o seguinte:
onde hoje aparece:
[txt-color=#0000f0]ASP CLASSICO > ASP.NET > C# > SQL / DATABASE > VB / VBA > VB.NET > Todos os fóruns[/txt-color]
alterar para:
[txt-color=#0000f0]ASP CLASSICO > ASP.NET > C# > SQL / DATABASE > VB6 / VBA > VB.NET (VB2005 Ã VB2010) > Todos os fóruns[/txt-color]
simples né, mas tudo bem não tem problema vamos continuar perdendo algum tempinho gerando uma ajuda em vb6 pra depois descobrirmos que é .net.
Bom acabei não esclarecendo a duvida do colega, eu não sou ainda muito inteirado com vb.net, porém posso dizer o seguinte, o VB.NET não possui mais a propriedade de se criar arrays de componentes, como existia no vb6, porém vc pode indicar o handler de um objeto em outro, para que ambos executem a mesma função, veja
o código acima vai mostar qual panel você clicou, porém agora vc terá de adapta-lo a sua necessidade
Obs:O exemplo postado acima infelizmente não alivia em nada o tamanho do código uma vez que você possui 100 panels, e terá de proceder da seguinte maneira.
vai ficar meio grandinho né,
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Panel1.Click, Panel2.Click, Panel3.Click
MessageBox.Show([Ô]Você clicou em [Ô] & sender.Name)
End Sub
o código acima vai mostar qual panel você clicou, porém agora vc terá de adapta-lo a sua necessidade
Obs:O exemplo postado acima infelizmente não alivia em nada o tamanho do código uma vez que você possui 100 panels, e terá de proceder da seguinte maneira.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Panel1.Click, Panel2.Click, Panel3.Click...Panel100.Click
vai ficar meio grandinho né,
Caro Marcelo, boa tarde...
Não estou conseguindo entender a lógica do seu código, ou não estou explicando direito o meu problema!
Tenho 100 Panels, 1 TextBox e 1 Button!
Preciso que quando apertar o Button, o Panel referente ao número digitado na TextBox carregasse a imagem no BackGround!
Ex: Se eu digitar o número 1 no TextBox, somente o Panel1 carrega a imagem.
Se eu digitar 2 no TextBox, somente o Panel2 carrega a imagem.
Minha dificuldade é em definir uma variável para os Panels!
Grato pela atenção.....
Abraço....
Não estou conseguindo entender a lógica do seu código, ou não estou explicando direito o meu problema!
Tenho 100 Panels, 1 TextBox e 1 Button!
Preciso que quando apertar o Button, o Panel referente ao número digitado na TextBox carregasse a imagem no BackGround!
Ex: Se eu digitar o número 1 no TextBox, somente o Panel1 carrega a imagem.
Se eu digitar 2 no TextBox, somente o Panel2 carrega a imagem.
Minha dificuldade é em definir uma variável para os Panels!
Grato pela atenção.....
Abraço....
então novamente vou tentar explicar, você está usando [txt-color=#e80000]VB.NET[/txt-color] e o VB.NET não possui mais a proriedade de se criar um array de objetos, no seu caso o Panel, porém pesquisando algo semelhante ( veja bem não sou programador de VB.NET e sim VB6) encontrei a informação postada acima baseada em Handle, porém ficará por sua conta achar a solução.
sugestão: Poste sua duvida no forum VB.NET
sugestão: Poste sua duvida no forum VB.NET
Caro Marcelo, mais uma vez obrigado pela atenção e desculpe qualquer coisa.....
Consegui resolver parcialmente meu problema usando a sugestão do Leandro, For Each.
Adaptei o código para:
For Each T In Me.TabPage1.Controls
If T.Name = [Ô]Panel[Ô] & Imagem.Text Then
T.BackGoundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
End If
Next
Usei o mesmo código para cada TabPage do Form e ficou perfeito!
Obrigado a todos pelas dicas....
Abraço....
Consegui resolver parcialmente meu problema usando a sugestão do Leandro, For Each.
Adaptei o código para:
For Each T In Me.TabPage1.Controls
If T.Name = [Ô]Panel[Ô] & Imagem.Text Then
T.BackGoundImage = Drawing.Image.FromFile(Application.StartupPath & [Ô]\Imagens\Imagem.jpg[Ô])
End If
Next
Usei o mesmo código para cada TabPage do Form e ficou perfeito!
Obrigado a todos pelas dicas....
Abraço....
Faça seu login para responder