Ordnael Posted January 26, 2016 at 05:26 PM Report Share #592584 Posted January 26, 2016 at 05:26 PM Boas, preciso de ajuda com um programa que estou a fazer. Colocando o nome de um trabalhador e o salário bruto que recebe, o programa dá-me o valor do salário líquido que ele recebe e quando desconta para o IRS e para a Segurança Social. O código em sí, não aparenta ter nenhum erro, o problema é quando corro o programa e coloco o nome e valor do salário. Depois "crasha". O meu código é este: Public Class Form1 Dim ordenado, descontoirs, descontoseg, nome As Single Dim liquido As Short Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ordenado = txtSalarioBr.Text descontoirs = txtDescIRS.Text descontoseg = txtDescSeg.Text liquido = txtSalarioLiq.Text If ordenado >= 500 < 749 Then descontoirs = (ordenado - 0.0425) * 100 ElseIf ordenado >= 750 < 1249 Then descontoirs = (ordenado - 0.1234) * 100 ElseIf ordenado >= 1250 < 2499 Then descontoirs = (ordenado - 0.22) * 100 ElseIf ordenado >= 2500 < 3499 Then descontoirs = (ordenado - 0.27) * 100 ElseIf ordenado >= 3500 < 5000 Then descontoirs = (ordenado - 0.35) * 100 End If descontoseg = (ordenado - 0.135) * 100 liquido = descontoirs - descontoseg txtSalarioLiq.Text = Str(liquido) concatenada.Text = Str(nome & " " & "Recebe:") End Sub End Class A janela é esta: O Erro é este: Alguém me pode ajudar? Link to comment Share on other sites More sharing options...
vikcch Posted January 26, 2016 at 05:42 PM Report Share #592585 Posted January 26, 2016 at 05:42 PM (edited) declaraste o nome como single? falta-te os AND's nos IF's Edited January 26, 2016 at 05:47 PM by vikcch Link to comment Share on other sites More sharing options...
vikcch Posted January 26, 2016 at 05:56 PM Report Share #592586 Posted January 26, 2016 at 05:56 PM coloca no inicio do codigo Option Strict On e Option Explicit On vai-te poupar algumas dores de cabeça mais tarde ex: Option Explicit On Option Strict On Public Class Form1 '.... End Class Link to comment Share on other sites More sharing options...
Ordnael Posted January 26, 2016 at 06:49 PM Author Report Share #592588 Posted January 26, 2016 at 06:49 PM coloca no inicio do codigo Option Strict On e Option Explicit On vai-te poupar algumas dores de cabeça mais tarde ex: Option Explicit On Option Strict On Public Class Form1 '.... End Class Se coloco isto aparecem-me 16 erros. Como faço isso? (ainda nao sou muito bom nisto) declaraste o nome como single? falta-te os AND's nos IF's O nome pode ser single porque é mesmo só o texto do nome não tem nada mais complexo. Se colocar os AND acontece isto: Link to comment Share on other sites More sharing options...
vikcch Posted January 26, 2016 at 08:09 PM Report Share #592589 Posted January 26, 2016 at 08:09 PM single é para valores numericos, para texto usa-se string If ordenado >= 500 < 749 Then isto não dá o resultado que esperas... tinhas que fazer: If ordenado >= 500 and ordenado < 749 Then fiz este code, tenta perceber o que foi feito: Option Explicit On Option Strict On Public Class Form1 Private Function getDescontoIRS(ByVal salarioBruto As Double) As Double If salarioBruto < 749 Then Return salarioBruto * 0.0425 ElseIf salarioBruto < 1249 Then Return salarioBruto * 0.1234 ElseIf salarioBruto < 2499 Then Return salarioBruto * 0.22 ElseIf salarioBruto < 3499 Then Return salarioBruto * 0.27 Else Return salarioBruto * 0.35 End If End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim salarioBruto As Double ' Tenta converter o valor da textbox "txtSalarioBr" para a var "salarioBruto" If Double.TryParse(txtSalarioBr.Text, salarioBruto) Then Dim descontoIRS As Double = getDescontoIRS(salarioBruto) MessageBox.Show(descontoIRS.ToString) Dim descontoSeg As Double = salarioBruto * 0.135 Dim salarioLiquido As Double = salarioBruto - descontoIRS - descontoSeg 'salarioLiquido.ToString("C") -> tranforma em valor monetario MessageBox.Show("Nome: " & txtNome.Text & vbNewLine & _ "Valor: " & salarioLiquido.ToString("C"), "Salario Liquido", MessageBoxButtons.OK, MessageBoxIcon.Information) Else MessageBox.Show("Salario Bruto mal introduzindo!", "ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub End Class Link to comment Share on other sites More sharing options...
Ordnael Posted January 27, 2016 at 10:21 AM Author Report Share #592599 Posted January 27, 2016 at 10:21 AM O que é que faz o: "Option Explicit On Option Strict On" ? Link to comment Share on other sites More sharing options...
vikcch Posted January 27, 2016 at 03:14 PM Report Share #592610 Posted January 27, 2016 at 03:14 PM tem lá os links para o site da microsoft no post onde disse isso... Option Explicit On -> obriga as variaveis usadas a serem declaradas... Option Strict On -> não permite troca de valores entre variaveis de diferentes tipos sem serem convertidas primeiro... Link to comment Share on other sites More sharing options...
Ordnael Posted January 28, 2016 at 06:25 PM Author Report Share #592734 Posted January 28, 2016 at 06:25 PM Pois mas nao consigo meter isso, coloco isso no inicio e fica tudo a azul e dá-me erros. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now