Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #58 da revista programar. Faz já o download aqui!

miguel55

soma de valores

Mensagens Recomendadas

miguel55    0
miguel55

como se soma este codigo ?

Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
       Dim uni As Decimal


       uni = Val(InputBox("Número de unidades: "))
       TextBox1.Text = uni * Val(CheckBox1.Tag)

   End Sub

   Private Sub CheckBox2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
       Dim uni As Decimal


       uni = Val(InputBox("Número de unidades: "))
       TextBox1.Text = uni * Val(CheckBox2.Tag)

Editado por ribeiro55

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
miguel55    0
miguel55

Somar o quê?

Tens de te explicar melhor...

O objectivo era somar a checkbox 1 com a checkbox 2, ambas têm valores previamente atribuidos através da "tag".

Ao selecionar essas 2 checkbox's o valor total da soma das duas apareceria através de uma textbox ou através de uma msgbox.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

Só se estiverem as duas seleccionadas?

Vou presumir que só queres somar se estiver seleccionada.

Se os valores estão na Tag e queres somar sempre os dois, porque não fazê-lo no mesmo sítio e ao mesmo tempo?

    Private Sub CheckBoxes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged,CheckBox2.CheckedChanged
       Dim uni As Decimal
       uni = Val(InputBox("Número de unidades: "))
       Dim tmpVal as Decimal = 0
       If CheckBox1.Checked Then tmpVal+=(uni*Val(CheckBox1.Tag))
       If CheckBox2.Checked Then tmpVal+=(uni*Val(CheckBox2.Tag))
       TextBox1.Text = tmpVal

   End Sub

No entanto, informo-te desde já que tens aí péssimas práticas e fraquíssima "resistência" a erro.

Editado por ribeiro55

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
miguel55    0
miguel55

Só se estiverem as duas seleccionadas?

Vou presumir que só queres somar se estiver seleccionada.

Se os valores estão na Tag e queres somar sempre os dois, porque não fazê-lo no mesmo sítio e ao mesmo tempo?

    Private Sub CheckBoxes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged,CheckBox2.CheckedChanged
       Dim uni As Decimal
       uni = Val(InputBox("Número de unidades: "))
       Dim tmpVal as Decimal = 0
       If CheckBox1.Checked Then tmpVal+=(uni*Val(CheckBox1.Tag))
       If CheckBox2.Checked Then tmpVal+=(uni*Val(CheckBox2.Tag))
       TextBox1.Text = tmpVal

   End Sub

No entanto, informo-te desde já que tens aí péssimas práticas e fraquíssima "resistência" a erro.

O código está funcional contudo ele está a somar e subtrair valores ao mesmo tempo :(

Editado por ribeiro55

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

Só se estiver seleccionada.

Novamente, não faço ideia de como estás a utilizar as checkboxes.

Se não interessa se está checked ou não, e interessa saber qual foi alterada, não estou a perceber porque usaste checkboxes e não botões, por exemplo...

Tens de explicar melhor o contexto da utilização. Já percebemos que não é um comportamento padrão.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
miguel55    0
miguel55

Só se estiver seleccionada.

Novamente, não faço ideia de como estás a utilizar as checkboxes.

Se não interessa se está checked ou não, e interessa saber qual foi alterada, não estou a perceber porque usaste checkboxes e não botões, por exemplo...

Tens de explicar melhor o contexto da utilização. Já percebemos que não é um comportamento padrão.

asdpch.jpg

Sendo isto um forma para seleção de refeições/aperitivos, necessito de somar as doses e unidades dos mesmos.

Então aconselhas-me a realizar isto de que forma? (Sou iniciante :c, todas as criticas e soluções são bem vindas e aceites!)

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
ribeiro55    44
ribeiro55

Já temia alguma coisa desse género.

Não podes fazer isso dessa forma.

É necessário existir consciência não só do valor unitário (presumo que seja o que está na Tag) mas também da quantidade.

Aconselho-te a espreitares a nossa Wiki, nomeadamente o artigo sobre Estruturas, Dictionary(Of) e talvez também o artigo da ListView.

Editado por ribeiro55

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    169
bioshock

Se percebi bem a questão, tu estás-lhe a dar uma solução válida, só tem é de haver uns ajustes.

Public Class Form1
Private valor As Double = 0.0
Private Sub checkboxs_changed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
	If (DirectCast(sender, CheckBox).Checked = False) Then
		valor -= DirectCast(sender, CheckBox).Tag
	Else
		valor += DirectCast(sender, CheckBox).Tag
	End If
	Label1.Text = "Valor: " & valor
End Sub
End Class

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
miguel55    0
miguel55

Se percebi bem a questão, tu estás-lhe a dar uma solução válida, só tem é de haver uns ajustes.

Public Class Form1
Private valor As Double = 0.0
Private Sub checkboxs_changed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
	If (DirectCast(sender, CheckBox).Checked = False) Then
		valor -= DirectCast(sender, CheckBox).Tag
	Else
		valor += DirectCast(sender, CheckBox).Tag
	End If
	Label1.Text = "Valor: " & valor
End Sub
End Class

 Private Sub CheckBoxes_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
    valor = Val(InputBox("Numero unidades: "))
    If (DirectCast(sender, CheckBox).Checked = False) Then
	    valor -= DirectCast(sender, CheckBox).Tag
    Else
	    valor += DirectCast(sender, CheckBox).Tag
    End If
    TextBox1.Text = "Valor: " & valor

   End Sub

Ok a este código acrescentei apenas a linha da inputbox que pergunta ao utilizador a quantiade/unidade que deseja. Contudo se designar que deseja apenas 1 unidade o cálculo é executado pelo programa de uma forma correta mas se designar que deseja 2 unidades ,o programa de um preço de 0,50 € uni. diz que passará a ser de 2,5€.

Como posso fazer para resolver a situação?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
bioshock    169
bioshock

Não podes fazer da forma que estás a fazer. A variável valor tem que ser pública como eu coloquei, porque se por algum momento alterares os valores, nunca vais conseguir ter o valor actual - a menos que insiras o valor actual em algum lado..

Public Class Form1
	Private valor As Double = 0.0
	Private Sub checkboxs_changed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
               Dim unidades As Integer = Val(InputBox("Numero unidades: "))
			If (DirectCast(sender, CheckBox).Checked = False) Then
					valor -= unidades * DirectCast(sender, CheckBox).Tag
			Else
					valor += unidades * DirectCast(sender, CheckBox).Tag
			End If
			Label1.Text = "Valor: " & valor
	End Sub
End Class

Não testei mas deve funcionar.

Editado por bioshock

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
miguel55    0
miguel55

Não podes fazer da forma que estás a fazer. A variável valor tem que ser pública como eu coloquei, porque se por algum momento alterares os valores, nunca vais conseguir ter o valor actual - a menos que insiras o valor actual em algum lado..

Public Class Form1
	Private valor As Double = 0.0
	Private Sub checkboxs_changed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
			Dim unidades As Integer = Val(InputBox("Numero unidades: "))
			If (DirectCast(sender, CheckBox).Checked = False) Then
					valor -= unidades * DirectCast(sender, CheckBox).Tag
			Else
					valor += unidades * DirectCast(sender, CheckBox).Tag
			End If
			Label1.Text = "Valor: " & valor
	End Sub
End Class

Não testei mas deve funcionar.

Working ^^, obrigado pela ajuda!

Já agora se me puderem ajudar apenas em mais um pequeno detalhe, queria fazer a listagem dos produtos que foram selecionados e sua respectiva quantidade. Qual a forma mais simples que tenho para o poder fazer?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nelson Sousa    0
Nelson Sousa

Já temia alguma coisa desse género.

Não podes fazer isso dessa forma.

É necessário existir consciência não só do valor unitário (presumo que seja o que está na Tag) mas também da quantidade.

Aconselho-te a espreitares a nossa Wiki, nomeadamente o artigo sobre Estruturas, Dictionary(Of) e talvez também o artigo da ListView.

Eu iria por essa dica.

Imagine se ao final a pessoa queira uma lista do que foi consumido?

Numa solução também não muito "elegante", talvez fosse o caso de trocar-se as checkboxs por textbox onde se colocaria as quantidades, e, só se consideraria as de valor >0(zero).

O mais correto mesmo seria utilizar-se de 2 tabelas, uma principal(Comanda, Ordem de Atendimento, etc,), e, outra tabela com os detalhes(itens) tais como preço, nome, quantidade de cada produto da comanda.

Ah..Estou supondo que você deseja controlar o consumo de clientes num restaurante.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Tiago Simões Marques    1
Tiago Simões Marques

Eu iria por essa dica.

Imagine se ao final a pessoa queira uma lista do que foi consumido?

Numa solução também não muito "elegante", talvez fosse o caso de trocar-se as checkboxs por textbox onde se colocaria as quantidades, e, só se consideraria as de valor >0(zero).

O mais correto mesmo seria utilizar-se de 2 tabelas, uma principal(Comanda, Ordem de Atendimento, etc,), e, outra tabela com os detalhes(itens) tais como preço, nome, quantidade de cada produto da comanda.

Ah..Estou supondo que você deseja controlar o consumo de clientes num restaurante.

Eu concordo, deves ter varias tabelas, ate porque depois se quiseres aumentar funcionalidades ao software, tens mais por onde pegar.

Por exemplo para o caso da restauração dar para colocar produtos por mesas.

Espero ter ajudado.

Editado por Tiago Simões Marques

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.