none
Dividir caracteres em labels - problema com array vazio RRS feed

  • Pergunta

  • Olá pessoal, estou com um pequeno programa para randomizar palavras em banco de dados, até ai tudo está funcionando bem. A palavra é escolhida aleatoriamente e logo em seguida é separada cada letra em um caractere. Meu intuito é mostrar cada letra em uma label, mas o problema é que as palavras não tem o mesmo tanto de caracteres e acaba dando erro por conter arrays vazios. 

                

    'Dividindo a palavra escolhida em caracteres

     Dim palavra As String = palavraescolhida
                Dim letra() As Char
                palavra = palavra.ToUpper()
                letra = palavra.ToCharArray

    'preenchendo os labesl com as letras da palavra escolhida (está dando erro)
                Label1.Text = letra(0)
                Label2.Text = letra(1)
                Label3.Text = letra(2)
                Label4.Text = letra(3)
                Label5.Text = letra(4)
                Label6.Text = letra(5)

    O erro é esse : 

    Ocorreu uma exceção sem tratamento do tipo "System.IndexOutOfRangeException" em Programa.exe
    Informações adicionais: O índice estava fora dos limites da matriz.

    No caso acima, se a palavra contiver 4 letras a variável letra(5) dá erro pois não está vazia. Como sou iniciante na programação não tenho muito ideia de como resolver esse problema.


    • Editado Oseias de Paula sábado, 6 de fevereiro de 2016 20:10 erro de digitação
    sábado, 6 de fevereiro de 2016 20:08

Respostas

  • Boa noite.

    Caso o projeto seja desktop, a solução seria algo do tipo:

            Dim word = TextBox1.Text
            Dim charArray = word.ToCharArray()
            Dim arraySize = charArray.Length
            Dim initialPos = New Point(10, 40)
    
            Dim dynLabel As Label
    
            For i = 0 To arraySize - 1
                dynLabel = New Label()
                dynLabel.Text = charArray(i)
                dynLabel.Name = "Label" + i.ToString()
                dynLabel.AutoSize = True
                dynLabel.Location = New Point(initialPos.X + (10 * i), initialPos.Y)
    
                Me.Controls.Add(dynLabel)
            Next
    Lembrando de alterar o valor da variável initialPos para definir a localização inicial e a propriedade Location da Label dinâmica para posicionar como for necessário.

    Att., Rafael Simor

    segunda-feira, 8 de fevereiro de 2016 02:06
  • Olá pessoal, estou com um pequeno programa para randomizar palavras em banco de dados, até ai tudo está funcionando bem. A palavra é escolhida aleatoriamente e logo em seguida é separada cada letra em um caractere. Meu intuito é mostrar cada letra em uma label, mas o problema é que as palavras não tem o mesmo tanto de caracteres e acaba dando erro por conter arrays vazios. 

                

    'Dividindo a palavra escolhida em caracteres

     Dim palavra As String = palavraescolhida
                Dim letra() As Char
                palavra = palavra.ToUpper()
                letra = palavra.ToCharArray

    'preenchendo os labesl com as letras da palavra escolhida (está dando erro)
                Label1.Text = letra(0)
                Label2.Text = letra(1)
                Label3.Text = letra(2)
                Label4.Text = letra(3)
                Label5.Text = letra(4)
                Label6.Text = letra(5)

    O erro é esse : 

    Ocorreu uma exceção sem tratamento do tipo "System.IndexOutOfRangeException" em Programa.exe
    Informações adicionais: O índice estava fora dos limites da matriz.

    No caso acima, se a palavra contiver 4 letras a variável letra(5) dá erro pois não está vazia. Como sou iniciante na programação não tenho muito ideia de como resolver esse problema.


    O problema do valor fixo é esse! se você estourar o número de posições do array ele dá essa mensagem "System.IndexOutOfRangeException". Tente entender os erros porque isso vai acontecer muitas vezes e você deve aprender porque acontece e a solução vem depois!

    Fulvio C

    • Marcado como Resposta Marcos SJ quarta-feira, 10 de fevereiro de 2016 13:52
    segunda-feira, 8 de fevereiro de 2016 13:03

Todas as Respostas

  • Boa noite,

    Para solucionar esse erro, você pode utilizar a lógica de adicionar campos de forma dinâmica.

    No link abaixo eu explico como fazer adicionar campos de forma dinâmica, a partir do evento CLICK do botão, mas no seu caso é possível utilizar a mesma lógica utilizando a quantidade de letras por palavra.

    http://smcode.com.br/CamposDinamicos.aspx

    OBS: o código está em C#, mas acredito que te ajudará.

    Abs.

    Bruno Destro


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/

    sábado, 6 de fevereiro de 2016 20:39
  • Valeu, vou tentar adaptar essa lógica!!!
    domingo, 7 de fevereiro de 2016 16:12
  • Boa noite.

    Caso o projeto seja desktop, a solução seria algo do tipo:

            Dim word = TextBox1.Text
            Dim charArray = word.ToCharArray()
            Dim arraySize = charArray.Length
            Dim initialPos = New Point(10, 40)
    
            Dim dynLabel As Label
    
            For i = 0 To arraySize - 1
                dynLabel = New Label()
                dynLabel.Text = charArray(i)
                dynLabel.Name = "Label" + i.ToString()
                dynLabel.AutoSize = True
                dynLabel.Location = New Point(initialPos.X + (10 * i), initialPos.Y)
    
                Me.Controls.Add(dynLabel)
            Next
    Lembrando de alterar o valor da variável initialPos para definir a localização inicial e a propriedade Location da Label dinâmica para posicionar como for necessário.

    Att., Rafael Simor

    segunda-feira, 8 de fevereiro de 2016 02:06
  • Olá pessoal, estou com um pequeno programa para randomizar palavras em banco de dados, até ai tudo está funcionando bem. A palavra é escolhida aleatoriamente e logo em seguida é separada cada letra em um caractere. Meu intuito é mostrar cada letra em uma label, mas o problema é que as palavras não tem o mesmo tanto de caracteres e acaba dando erro por conter arrays vazios. 

                

    'Dividindo a palavra escolhida em caracteres

     Dim palavra As String = palavraescolhida
                Dim letra() As Char
                palavra = palavra.ToUpper()
                letra = palavra.ToCharArray

    'preenchendo os labesl com as letras da palavra escolhida (está dando erro)
                Label1.Text = letra(0)
                Label2.Text = letra(1)
                Label3.Text = letra(2)
                Label4.Text = letra(3)
                Label5.Text = letra(4)
                Label6.Text = letra(5)

    O erro é esse : 

    Ocorreu uma exceção sem tratamento do tipo "System.IndexOutOfRangeException" em Programa.exe
    Informações adicionais: O índice estava fora dos limites da matriz.

    No caso acima, se a palavra contiver 4 letras a variável letra(5) dá erro pois não está vazia. Como sou iniciante na programação não tenho muito ideia de como resolver esse problema.


    O problema do valor fixo é esse! se você estourar o número de posições do array ele dá essa mensagem "System.IndexOutOfRangeException". Tente entender os erros porque isso vai acontecer muitas vezes e você deve aprender porque acontece e a solução vem depois!

    Fulvio C

    • Marcado como Resposta Marcos SJ quarta-feira, 10 de fevereiro de 2016 13:52
    segunda-feira, 8 de fevereiro de 2016 13:03