Jump to content
miguel55

Soma de valores

Recommended Posts

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)

Edited by ribeiro55

Share this post


Link to post
Share on other sites
ribeiro55

Somar o quê?

Tens de te explicar melhor...


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
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.

Share this post


Link to post
Share on other sites
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.

Edited by ribeiro55

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
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 :(

Edited by ribeiro55

Share this post


Link to post
Share on other sites
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.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
miguel55
Em 21/05/2013 às 16:31, ribeiro55 disse:

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.

http://imageshack.us/a/img94/4512/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!)

Share this post


Link to post
Share on other sites
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.

Edited by ribeiro55

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
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

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
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.

Edited by bioshock

Share this post


Link to post
Share on other sites
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?

Share this post


Link to post
Share on other sites
ribeiro55

Aproveitas o código que te foi dado e adicionas ou removes de uma listview (por exemplo) os produtos.

ListView1.Items.Add(DirectCast(sender, Checkbox).Tag.ToString())

http://www.macoratti.net/vbn_lstv.htm

Macoratti para quê?

http://wiki.portugal-a-programar.pt/dev_net:vb.net:listviews_36_utilidades_directas


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
bioshock

Porque foi o 1º link no google e porque não fazia ideia que havia esse artigo na wiki.

Share this post


Link to post
Share on other sites
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.


Um Abraço,

Nelson Sousa

Share this post


Link to post
Share on other sites
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.

Edited by Tiago Simões Marques

Tiago Simões Marques

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.