Jump to content

[Resolvido] Erro - Conversão da cadeia


Artur_Ferreira
 Share

Recommended Posts

Artur_Ferreira

Boas meus amigos,

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")

Exit Sub

End If

dá o seguinte erro erro:

An unhandled exception of type 'System.InvalidCastException' occurred in Microsoft.VisualBasic.dll

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!

Obrigado,

Artur

Link to comment
Share on other sites

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.

Este código:

[b]peso = TXT_peso.Text
altura = TXT_altura.Text
idade = TXT_idade.Text[/b]
[b]

[/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.

Link to comment
Share on other sites

Artur_Ferreira

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 😞

Obrigado.

Link to comment
Share on other sites

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.

Podes verificar se a textbox está vazia usando:

If string.IsNullOrWhiteSpace(txt_idade.text) Then
'está vazia
End If
[code]

quanto aos métodos acima, usas assim:

[code]
Dim number As Double
if double.tryparse(txt_idade.text,number) Then
'O texto da txt_idade foi convertido para double 'number' variável
End If
Dim number2 as Integer
if int32.tryparse(txt_idade.text, number2) Then
'O texto da txt_idade foi convertido para integer 'number2' variável
End If

Tens aí exemplo de uso em cima, espero que ajude.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.