Usuário com melhor resposta
Dividir caracteres em labels - problema com array vazio

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
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
- Sugerido como Resposta Fulvio Cezar Canducci Dias segunda-feira, 8 de fevereiro de 2016 13:31
- Marcado como Resposta Marcos SJ quarta-feira, 10 de fevereiro de 2016 13:52
-
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.
Fulvio C
- Marcado como Resposta Marcos SJ quarta-feira, 10 de fevereiro de 2016 13:52
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/
-
-
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
- Sugerido como Resposta Fulvio Cezar Canducci Dias segunda-feira, 8 de fevereiro de 2016 13:31
- Marcado como Resposta Marcos SJ quarta-feira, 10 de fevereiro de 2016 13:52
-
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.
Fulvio C
- Marcado como Resposta Marcos SJ quarta-feira, 10 de fevereiro de 2016 13:52