SIMPLIFICAR CODIGO

MCJOTA 23/06/2013 01:56:11
#425101
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....
LLAIA 24/06/2013 12:41:35
#425148
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);
}
MARCELO.TREZE 24/06/2013 13:45:17
#425151
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:

  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
MCJOTA 24/06/2013 14:28:45
#425152
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...
FEDERHEN 25/06/2013 11:46:12
#425184
Citação:

:
Estou usando o VB 2010 Express!



VB2010 é NET...
Por que postou em VB/VBA ???
MARCELO.TREZE 25/06/2013 12:32:51
#425192
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.
MARCELO.TREZE 25/06/2013 13:33:27
#425194
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

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é,


MCJOTA 25/06/2013 15:56:06
#425201
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....
MARCELO.TREZE 26/06/2013 10:54:19
#425236
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
MCJOTA 26/06/2013 18:56:00
#425275
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....
Faça seu login para responder