none
Simplificar código. RRS feed

  • Pergunta

  • 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....


    • Editado McJota domingo, 23 de junho de 2013 06:43
    domingo, 23 de junho de 2013 04:53

Respostas

  • Consegui resolver parcialmente meu problema usando um For Each.

    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....
    • Marcado como Resposta McJota quarta-feira, 26 de junho de 2013 22:02
    quarta-feira, 26 de junho de 2013 22:02

Todas as Respostas

  • Veja se assim te serve (Codigo em C#) mais com poucas modificações funciona em VB.Net

     Panel[] painel = new Panel[100];
                TextBox imagem = new TextBox();
                
                for (int i = 0; i < 100; i++)
                {
                    switch (imagem.Text)
                    {
                        case "1":
                            {
                                painel[i].BackgroundImage = System.Drawing.Image.FromFile(Application.StartupPath & @"\Imagens\Imagem.jpg");
                                break;
                            }
                        case "2":
                            {
                                painel[i].BackgroundImage = System.Drawing.Image.FromFile(Application.StartupPath & @"\Imagens\Imagem.jpg");
                                break;
                            }
    
                    }
                }

    Se te ajudou marca como resposta.
    • Editado Mr. GMSOFT domingo, 23 de junho de 2013 11:05 Alteração
    • Sugerido como Resposta Renato Pedroso domingo, 23 de junho de 2013 11:39
    domingo, 23 de junho de 2013 11:04
  • Caro Marcelino, tentei adaptar o código ao meu projeto más não consegui, estou trabalhando com VB 2010.

    Como postei anteriormente, meu Form tem 100 Panels ( Panel1 até Panel100 ) , preciso que ao pressionar o botão , carregasse a imagem no Panel indicado pelo TextBox!

    Se fosse TextBox1.text = "1" , o Panel1 carregasse a imagem , se fosse TextBox1.text = "29" , o Panel29 carregasse a imagem!

    Estou usando 100 linhas de códigos repetidas , funciona bem más fica muito extenso!

    Obrigado pela atenção....

    domingo, 23 de junho de 2013 22:53
  • Consegui resolver parcialmente meu problema usando um For Each.

    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....
    • Marcado como Resposta McJota quarta-feira, 26 de junho de 2013 22:02
    quarta-feira, 26 de junho de 2013 22:02
  • Você pode adicionar um break no seu if depois de associar a imagem

    isso vai fazer com que caso ele encontre, ele não continue procurando mais, melhorando sua performance.

    sexta-feira, 28 de junho de 2013 13:35
  • Boas Felipe....

    Podes me mostrar como ficaria o código com o Break, pois desconheço esse comando!

    Grato pela atenção.....

    sexta-feira, 28 de junho de 2013 18:40
  • For Each T In Me.TabPage1.Controls
                If T.Name = "Panel" & Imagem.Text Then
                    T.BackGoundImage = Drawing.Image.FromFile(Application.StartupPath & "\Imagens\Imagem.jpg")

    break;
                End If
            Next

    quinta-feira, 4 de julho de 2013 18:38