Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sir Pereira

[RESOLVIDO] Conversão impossível?

Recommended Posts

Sir Pereira

Boas pessoal,

estou a fazer um programa de gestão de pizzarias, e estou aqui com um problema na "calculadora", isto é:

    Private Sub botao_entradas_paodealho_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botao_entradas_paodealho.Click

        If CalculadoraPedidos.lista_pedidos.Items.Contains("1x Pão de Alho") Then

            qtd_paodealho += 1

            CalculadoraPedidos.lista_pedidos.Items.Item("1x Pão de Alho") = qtd_paodealho.ToString & "x Pão de Alho"

        Else

            qtd_paodealho += 1

            CalculadoraPedidos.lista_pedidos.Items.Item(qtd_paodealho & "x Pão de Alho") = qtd_paodealho & "x Pão de Alho"

        End If

    End Sub

Tenho o qtd_paodealho declarado como global da calculadora.

O erro que me dá é que não foi possível converter a string "1x Pão de Alho" para integer, (mas eu não estou a converter a string) ... e dá-me o erro aqui neste parte:

            CalculadoraPedidos.lista_pedidos.Items.Item(qtd_paodealho & "x Pão de Alho") = qtd_paodealho & "x Pão de Alho"

E eu não estou a perceber porquê, será que me podiam dar uma mãozinha?

Cumprimentos

Share this post


Link to post
Share on other sites
jpaulino

Explica que controlos estás a utilizar e tenta

CalculadoraPedidos.lista_pedidos.Items.Item(qtd_paodealho.ToString() & "x Pão de Alho") = qtd_paodealho.ToString() & "x Pão de Alho"

Share this post


Link to post
Share on other sites
anolsi

CalculadoraPedidos.lista_pedidos.Items.Item() <-- O Valor aqui dentro deve ser um índice numérico que começa em 0, penso eu, mas podes explicar melhor o que estas a fazer?


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
Sir Pereira

CalculadoraPedidos.lista_pedidos.Items.Item() <-- O Valor aqui dentro deve ser um índice numérico que começa em 0, penso eu, mas podes explicar melhor o que estas a fazer?

Não necessariamente, se colocar a string do item, ele encontra-a também (se não estou em erro).

Ora bem, quando clico no botão do Pão de Alho, é suposto ir adicionando items à listbox (lista_produtos), e estava a tentar fazer um algoritmo para tal.

screen-1.jpg

Cumps

Share this post


Link to post
Share on other sites
jpaulino

Ok, já entendi!

As listbox não permitem indicar um texto (que supostamente é o item) mas sim o index (base 0).

Como queres inserir apenas fazer:

CalculadoraPedidos.lista_pedidos.Items.Add(qtd_paodealho.ToString & "x Pão de Alho")

Share this post


Link to post
Share on other sites
Sir Pereira

Boas, obrigado pela resolução desse problema. Porque agora vem, quando a condição torna verdadeira.

Agora tenho o mesmo problema mas no código de cima:

        If CalculadoraPedidos.lista_pedidos.Items.Contains("1x Pão de Alho") Then

            qtd_paodealho += 1

            CalculadoraPedidos.lista_pedidos.Items.Item("1x Pão de Alho") = qtd_paodealho.ToString & "x Pão de Alho"

E não vou por o Item como 0, pois imagina que tenho mais produtos na lista.

Cumps

Share this post


Link to post
Share on other sites
anolsi

Explica-me uma coisa, de cada vez que ele carrega no Botão "Pão de alho", o valor mesmo item vai subindo certo?

Tipo 1 vez:

    1x Pão de Alho

2 Vezes:

    2x Pão de Alho

Certo? Ou estou a raciocinar mal?


"Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."
Não respondo a questões por PM que possam ser colocadas no fórum!

Share this post


Link to post
Share on other sites
Sir Pereira

Explica-me uma coisa, de cada vez que ele carrega no Botão "Pão de alho", o valor mesmo item vai subindo certo?

Tipo 1 vez:

    1x Pão de Alho

2 Vezes:

    2x Pão de Alho

Certo? Ou estou a raciocinar mal?

Certo.

E é suposto fazer o mesmo para o resto dos produtos.

Irem todos sendo adicionados, mas conforme a quantidade aumentar, aumenta a variável antes.

Share this post


Link to post
Share on other sites
jpaulino

Não estou a entender o teu problema agora! Queres decrementar/incrementar caso o item esteja na lista ?

Fazes um ciclo nos itens e caso encontre o teu modificas apenas esse (de acordo com o index)

Share this post


Link to post
Share on other sites
jpaulino

Por exemplo (tens de adaptar é claro):

Public Class Form1

    ' INCREMENTAR

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        For x As Integer = 0 To Me.ListBox1.Items.Count - 1

            If Me.ListBox1.Items(x).ToString.Contains("batatas") Then

                Dim value As Integer = Integer.Parse(Me.ListBox1.Items(x).Split(" "c)(0)) + 1

                Me.ListBox1.Items(x) = value & " batatas"

            End If

        Next

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ListBox1.Items.Add("1 batatas")

        ListBox1.Items.Add("2 maças")

        ListBox1.Items.Add("3 laranjas")

    End Sub

End Class

Share this post


Link to post
Share on other sites
Sir Pereira

Desculpa mas não consegui adaptar, não percebi este código:

                Dim value As Integer = Integer.Parse(Me.ListBox1.Items(x).Split(" "c)(0)) + 1

O código actual está assim:

    Private Sub botao_entradas_paodealho_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botao_entradas_paodealho.Click

        If CalculadoraPedidos.lista_pedidos.Items.Contains("1x Pão de Alho") Then

            qtd_paodealho += 1

            For x As Integer = 0 To CalculadoraPedidos.lista_pedidos.Items.Count - 1

                If CalculadoraPedidos.lista_pedidos.Items(x).ToString.Contains("1x Pão de Alho") Then

                    Dim value As Integer = Integer.Parse(CalculadoraPedidos.lista_pedidos.Items(x).Split(" "c)(0)) + 1

                    CalculadoraPedidos.lista_pedidos.Items(x) = value & "x Pão de Alho"

                End If

            Next

        Else

            qtd_paodealho += 1

            CalculadoraPedidos.lista_pedidos.Items.Add(qtd_paodealho & "x Pão de Alho")

        End If

    End Sub

Desculpa o incómodo :confused:

Share this post


Link to post
Share on other sites
jpaulino

Integer.Parse()

converte para integer

Me.ListBox1.Items(x).Split(" "c)(0)

devolve o primeiro item do array. Ou seja, como tenho no exemplo "1 batatas" é o mesmo que fazer:

Dim str() As String = Me.ListBox1.Items(x).Split(" "c)

MessageBox.Show(str(0))

A primeira parte que tens só resulta se o item tiver o texto igual, ou seja, se na lista tiveres "2x Pão de Alho" já não funciona. A solução e procurar item a item na lista, apenas por "Pão de Alho"

If CalculadoraPedidos.lista_pedidos.Items.Contains("1x Pão de Alho") Then

Tenta assim:

Private Sub botao_entradas_paodealho_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles botao_entradas_paodealho.Click

            Dim found As Boolean

         

            For x As Integer = 0 To CalculadoraPedidos.lista_pedidos.Items.Count - 1

                If CalculadoraPedidos.lista_pedidos.Items(x).ToString.Contains("Pão de Alho") Then

                    Dim value As Integer = Integer.Parse(CalculadoraPedidos.lista_pedidos.Items(x).Split(" "c)(0)) + 1

                    CalculadoraPedidos.lista_pedidos.Items(x) = value & "x Pão de Alho"

                    found  = True

                    Exit For

                End If

            Next

            If Not found Then

                  CalculadoraPedidos.lista_pedidos.Items.Add(qtd_paodealho & "x Pão de Alho")

            End If

    End Sub

PS: Mais ou menos ... não testado!

Share this post


Link to post
Share on other sites
jpaulino

É porque tu tens "1x Pão de Alho" e o split divide em

"1x"

"Pão"

"de"

"Alho"

Dá um espaço entre o 1 e o x

Share this post


Link to post
Share on other sites
jpaulino

Não sei, não estou a ver o que fizeste :confused: ... mas se mantivestes o codigo que mostrei, tens de alterar isto:

            If Not found Then

                  CalculadoraPedidos.lista_pedidos.Items.Add(qtd_paodealho & "x Pão de Alho")

            End If

Se a variavel qtd_paodealho não tem valores (caso não tenhas atribuido por ti), assume zero.

Se quando carregas da primeira vez é para aparecer 1, então basta alterares para:

          If Not found Then

                  CalculadoraPedidos.lista_pedidos.Items.Add("1 x Pão de Alho")

            End If

Share this post


Link to post
Share on other sites
vbtipo

Citar

Dim value As Integer = integer.Parse(CalculadoraPedidos.lista_pedidos.Items(x).Split(" "c)(0)) + 1

Erro:

Input string was not in a correct format.

Epah, uma coisa que me estava a parecer tão fácil de fazer ao início, agora está a complicar-se :P

Experimenta lá assim;

Dim value As Integer = integer.Parse(CalculadoraPedidos.lista_pedidos.Items(x).Split(" "c)(0) + 1)


Lema: Se eu não saber de alguma coisa não se preocupem porque tento sempre ajudar alguma coisita, nem que seja, por palpites/sugestões.

Share this post


Link to post
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

×

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.