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

Sir Pereira

[RESOLVIDO] Conversão impossível?

19 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

Incrementar.

E como o encontro?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
                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 :confused:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, obrigado, já funciona, mas a primeira vez que carrego aparece "0 x Pão de Alho" .. porquê?

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Epah, you're the man ! :confused:

Obrigado e desculpa pelo incómodo :P

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

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