[Resolvido] Erro - Conversão da cadeia - Visual Basic .NET - Portugal-a-Programar
[Resolvido] Erro - Conversão da cadeia
By Artur_Ferreira,
October 19, 2015 in Visual Basic .NET
Artur_Ferreira
estou a iniciar programação e a utilizar o VB 2015, e basicamente o que quero fazer é ter 3 variáveis:
Dim peso As Double, altura As Double, idade As Integer
essas variáveis vão receber os valor de 3 TextBox's
peso = TXT_peso.Text
altura = TXT_altura.Text
idade = TXT_idade.Text
e se por exemplo a variável idade tiver um valor abaixo dos 20 ou vazia, aparecer uma MsgBox com um aviso!
Até aqui nada de outro mundo, só que quando é inicializado o Botão para fazer qualquer cálculo quando chega a verificação
If TXT_idade.Text < 20 Or TXT_idade.Text = " " Then
MsgBox("Consultar a fig.1")
dá o seguinte erro erro:
Additional information: A conversão da cadeia "" para o tipo 'Integer' não é válida.
Já andei com variáveis para cima e para baixo, mas não consigo eliminar este erro, por isso pedia a vossa ajuda a ver se arrumo com o erro!
O erro é explicito, o que estás a fazer não deveria ser válido, um conselho, liga a Option Strict On em todos os projectos que trabalhares em vb.
[b]peso = TXT_peso.Text
idade = TXT_idade.Text[/b]
Não deveria por momento nenhum ser válido, estás a igualar 2 Double's e um integer a 1 campos de string cada, são tipos diferentes, não os deves misturar, por isso é que levas com o erro no If End If em baixo, 'InvalidCast' significa que estás a fazer cast (implicitamente, como acontece na declaração acima, o vb permite isto sem a option strict on) de um tipo de dados para outro, o que não é compatível neste caso, e causa-te o erro.
Para ser explicito o erro diz-zte "Conversão da cadeia "" para Integer não é válida" "" significa string, ou seja, a conversão (cast neste caso) de string para integer não é valida, tens de usar um dos métodos de conversão que o framework te dá.
Já agora, porque estás a verificar se TXT_idade.text = " " ? É que no mesmo bloco estás a verificar se é menor que 20, ou seja, tás a verificar diferentes tipos, o que não será possível porque ou é um tipo ou é outro, misturálos vai-te causar confusão mesmo que conseguisses 'mascarar' o erro.
O meu conselho, se quiseres continuar a usar Double Double Integer para isso, é tentares converter o texto para double | integer e tentares lidar com possiveis erros.
Podes fazer isso com Double.TryParse e Int32.TryParse
Cada um dos links têm exemplos como usares, se tiveres alguma dúvida pergunta.
Os campos são textboxs que recebem os valores neste caso inteiros e decimais, depois são colocados nas respetivas variáveis.
Como disse em cima estou a começar a programação, podes explicar-me por favor o que é o Cast?
A ideia era verificar TXT_idade.text estava vazia ou se tinha um valor inferior a 20, daí pensar fazer tudo no mesmo bloco,porque a msg é igual para as duas condições.
Estive a ver Double.TryParse e Int32.TryParse mas não consigo perceber onde coloco a conversão, os exemplos são demasiado complexo para um iniciante 😞
Eu sei que são textboxs e sei o que estás a tentar fazer, tentei explicar-te o porquê de não dar.
tens 2 variáveis Double e uma integer.
A propriedade 'Text' da Textbox (TXT_idade.TEXT) é texto, ou seja é 'string', tu não podes comparar nem igualar strings com integers/Doubles, apenas podes fazê-lo com outras strings, o mesmo serve para qualquer tipo.
Escreve em cima do teu código, 1ª linha da folha de código toda "Option Strict On" e vais ver que o teu código nem irá compilar, e o compilador irá te dizer o mesmo que eu estou a dizer, e se for Visual Studio provavelmente tentar te oferecer uma solução no intellisense.
A solução é, neste caso, converteres o texto para integer/double com os métodos que te disse em cima e verificares o que tiveres a verificar.