none
Ajuda com Looping RRS feed

  • Pergunta

  • Ola, uma vez eu ouvi que se voce pensar que esta sendo repetitivo, eh porque voce esta. Estou em um projeto que estou lendo em um arquivo de texto com a seguinte que ira amarzenar 16 linhas e em cada linha tera 1 numero de 1 a 6, por exemplo:

    Linha 1:  5

    Linha 2:  3

    Linha 3:  3

    Linha 4:  1

    Linha 5:  6

    Linha 6:  2

    Linha 7:  4

    ...Etc....

    No meu projeto tenho 16 botoes e essas 16 linhas sao para definir a cor do texto de cada botao. Por exemplo, o numero 1 do arquivo de texto deve representar a cor Preta. Eu escrevi o codigo com varios Ifs, mas realmente esta super repetitivo e tenho certeza que eh possivel resolver com um loop, mas nao estou conseguindo fazer. Se alguem puder ajudar, sera otimo! Segue abaixo como ficou parte do codigo com IF:

    Dim ReadLine As String() = System.IO.File.ReadAllLines("C:\teste.txt")

    If (ReadLine(0)) = 1 Then
                botao1.ForeColor = Color.Black
            Else
                If (ReadLine(0)) = 2 Then
                    botao1.ForeColor = Color.White
                Else
                    If (ReadLine(0)) = 3 Then
                        botao1.ForeColor = Color.Blue
                    Else
                        If (ReadLine(0)) = 4 Then
                            botao1.ForeColor = Color.Yellow
                        Else
                            If (ReadLine(0)) = 5 Then
                                botao1.ForeColor = Color.Red
                            Else
                                If (ReadLine(0)) = 6 Then
                                    botao1.ForeColor = Color.Green
                                Else
                                    If (ReadLine(1)) = 1 Then
                                        botao2.ForeColor = Color.Black
                                    Else
                                        If (ReadLine(1)) = 2 Then
                                            botao2.ForeColor = Color.White
                                        Else
                                            If (ReadLine(1)) = 3 Then
                                                botao2.ForeColor = Color.Blue
                                            Else
                                                If (ReadLine(1)) = 4 Then
                                                    botao2.ForeColor = Color.Yellow
                                                Else
                                                    If (ReadLine(1)) = 5 Then
                                                        botao2.ForeColor = Color.Red
                                                    Else
                                                        If (ReadLine(1)) = 6 Then
                                                            botao2.ForeColor = Color.Green

    E continuaria com alterando o numero do botao ate o numero do botao16.

    domingo, 11 de fevereiro de 2018 04:29

Respostas

  • Bom dia, MRD.

    Segue minha sugestão com 16 botões e 6 cores.

    Coloque as cores em um array para fazer um loop.

    Dá para reduzir mais ainda se utilizar um For Each dos botôes, mas pode haver erro caso haja mais botões no formulário ou se estiverem em groupbox. Mas você pode tentar.

    Se te ajudou, marque como resposta/ útil.

     Private Sub ler_cores()
            Dim Cor() As Color = {Color.Black, Color.White, Color.Blue, Color.Yellow, Color.Red, Color.Green}
    
            Dim arquivotxt As String = "C:\Users\Mariano\Desktop\Novo Documento de Texto.txt"
    
            If IO.File.Exists(arquivotxt) Then
                Dim fluxoTexto As IO.StreamReader = New IO.StreamReader(arquivotxt)
                Dim linhaTexto As String
                Dim I As Integer = 1
    
                Try
                    linhaTexto = fluxoTexto.ReadLine
                    While linhaTexto <> Nothing
                        Select Case I
                            Case 1
                                Button1.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 2
                                Button2.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 3
                                Button3.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 4
                                Button4.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 5
                                Button5.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 6
                                Button6.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 7
                                Button7.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 8
                                Button8.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 9
                                Button9.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 10
                                Button10.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 11
                                Button11.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 12
                                Button12.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 13
                                Button13.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 14
                                Button14.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 15
                                Button15.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 16
                                Button16.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case Else
                                Exit While
                        End Select
                        linhaTexto = fluxoTexto.ReadLine
                    End While
    
                    fluxoTexto.Close()
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
            Else
    
                MessageBox.Show("Arquivo não existe")
    
            End If


    MARIANO1776


    • Sugerido como Resposta João Paulo [] domingo, 11 de fevereiro de 2018 15:58
    • Editado Mariano1776 domingo, 11 de fevereiro de 2018 18:24 erro de digitação
    • Marcado como Resposta MRD2018 segunda-feira, 12 de fevereiro de 2018 22:15
    domingo, 11 de fevereiro de 2018 11:14
  • Segunda sugestão:

    Private Sub ler_cores_2() Dim Cor() As Color = {Color.Black, Color.White, Color.Blue, Color.Yellow, Color.Red, Color.Green} Dim arquivotxt As String = "C:\Users\Mariano\Desktop\Novo Documento de Texto.txt" If IO.File.Exists(arquivotxt) Then Dim fluxoTexto As IO.StreamReader = New IO.StreamReader(arquivotxt) Dim linhaTexto As String Dim I As Integer = 1 Try linhaTexto = fluxoTexto.ReadLine While linhaTexto <> Nothing For Each btn As Control In Me.Controls

    'For Each btn As Control In Me.GroupBox_Botões.Controls 'Caso os botões estejam agrupados If TypeOf (btn) Is Button Then If btn.Name = "Button" & I.ToString Then btn.ForeColor = Cor(CInt(linhaTexto) - 1) End If End If Next I += 1 linhaTexto = fluxoTexto.ReadLine End While fluxoTexto.Close() Catch ex As Exception MessageBox.Show(ex.ToString) End Try Else MessageBox.Show("Arquivo não existe") End If End Sub



    MARIANO1776



    • Sugerido como Resposta Mariano1776 domingo, 11 de fevereiro de 2018 18:24
    • Editado Mariano1776 domingo, 11 de fevereiro de 2018 18:35
    • Marcado como Resposta MRD2018 segunda-feira, 12 de fevereiro de 2018 22:16
    domingo, 11 de fevereiro de 2018 11:18

Todas as Respostas

  • Bom dia, MRD.

    Segue minha sugestão com 16 botões e 6 cores.

    Coloque as cores em um array para fazer um loop.

    Dá para reduzir mais ainda se utilizar um For Each dos botôes, mas pode haver erro caso haja mais botões no formulário ou se estiverem em groupbox. Mas você pode tentar.

    Se te ajudou, marque como resposta/ útil.

     Private Sub ler_cores()
            Dim Cor() As Color = {Color.Black, Color.White, Color.Blue, Color.Yellow, Color.Red, Color.Green}
    
            Dim arquivotxt As String = "C:\Users\Mariano\Desktop\Novo Documento de Texto.txt"
    
            If IO.File.Exists(arquivotxt) Then
                Dim fluxoTexto As IO.StreamReader = New IO.StreamReader(arquivotxt)
                Dim linhaTexto As String
                Dim I As Integer = 1
    
                Try
                    linhaTexto = fluxoTexto.ReadLine
                    While linhaTexto <> Nothing
                        Select Case I
                            Case 1
                                Button1.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 2
                                Button2.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 3
                                Button3.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 4
                                Button4.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 5
                                Button5.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 6
                                Button6.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 7
                                Button7.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 8
                                Button8.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 9
                                Button9.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 10
                                Button10.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 11
                                Button11.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 12
                                Button12.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 13
                                Button13.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 14
                                Button14.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 15
                                Button15.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case 16
                                Button16.ForeColor = Cor(CInt(linhaTexto) - 1)
                                I += 1
                            Case Else
                                Exit While
                        End Select
                        linhaTexto = fluxoTexto.ReadLine
                    End While
    
                    fluxoTexto.Close()
                Catch ex As Exception
                    MessageBox.Show(ex.ToString)
                End Try
            Else
    
                MessageBox.Show("Arquivo não existe")
    
            End If


    MARIANO1776


    • Sugerido como Resposta João Paulo [] domingo, 11 de fevereiro de 2018 15:58
    • Editado Mariano1776 domingo, 11 de fevereiro de 2018 18:24 erro de digitação
    • Marcado como Resposta MRD2018 segunda-feira, 12 de fevereiro de 2018 22:15
    domingo, 11 de fevereiro de 2018 11:14
  • Segunda sugestão:

    Private Sub ler_cores_2() Dim Cor() As Color = {Color.Black, Color.White, Color.Blue, Color.Yellow, Color.Red, Color.Green} Dim arquivotxt As String = "C:\Users\Mariano\Desktop\Novo Documento de Texto.txt" If IO.File.Exists(arquivotxt) Then Dim fluxoTexto As IO.StreamReader = New IO.StreamReader(arquivotxt) Dim linhaTexto As String Dim I As Integer = 1 Try linhaTexto = fluxoTexto.ReadLine While linhaTexto <> Nothing For Each btn As Control In Me.Controls

    'For Each btn As Control In Me.GroupBox_Botões.Controls 'Caso os botões estejam agrupados If TypeOf (btn) Is Button Then If btn.Name = "Button" & I.ToString Then btn.ForeColor = Cor(CInt(linhaTexto) - 1) End If End If Next I += 1 linhaTexto = fluxoTexto.ReadLine End While fluxoTexto.Close() Catch ex As Exception MessageBox.Show(ex.ToString) End Try Else MessageBox.Show("Arquivo não existe") End If End Sub



    MARIANO1776



    • Sugerido como Resposta Mariano1776 domingo, 11 de fevereiro de 2018 18:24
    • Editado Mariano1776 domingo, 11 de fevereiro de 2018 18:35
    • Marcado como Resposta MRD2018 segunda-feira, 12 de fevereiro de 2018 22:16
    domingo, 11 de fevereiro de 2018 11:18
  • Ola Mariano,

    Muito obrigado pela ajuda. Irei testar essa semana e te aviso!

    Os botoes nao estao em grupbox, e nomeei como btnDept1, btnDept2, btnDept3, etc... Ficara mais facil com a segunda sugestao.

    Obrigado mesmo!

    MRD

    segunda-feira, 12 de fevereiro de 2018 05:42
  • Bom dia.

    Pus as duas sugestões acima.

    Fiz os testes com as duas.


    MARIANO1776

    • Marcado como Resposta MRD2018 segunda-feira, 12 de fevereiro de 2018 22:16
    • Não Marcado como Resposta Filipe B CastroModerator segunda-feira, 19 de fevereiro de 2018 18:53
    segunda-feira, 12 de fevereiro de 2018 09:23
  • Mariano,

    Muito obrigado pela ajuda!

    segunda-feira, 12 de fevereiro de 2018 22:17
  • De nada.

    MARIANO1776

    terça-feira, 13 de fevereiro de 2018 01:10