none
Passagem de Valores RRS feed

  • Pergunta

  • Pessoal,

    boa noite,

    estou com um probleminha que é o seguinte. Tenho dois Formularios A e B. Qdo eu abro o A posso chamar o B, o B vai pesquisar um determinado produto e me retornar atrasaver de um objeto Static para o Form A o nome, preço, qtde em estoque. Assim que o form A é carregado com as váriaveis de B alguns campos são preenchido como NomeProduto, ValorProduto etc. Mas o que acontece mesmo é que no Form A onde que é retornando o Nome do Produto eu queria fazer uma consulta(pesquisar sem ter que abrir outro form) somente com o código do produto, sem digitar String, até ai tudo bem é so fazer isso.

    try{
    variavel x = Inte32.Parse(txtProduto.nome);
    }
    catch{
    txtProduto.Text = "";
    }

    Bom o está acontecendo é o seguinte, qdo faço a pesquisa usando um código não consigo retornar tudo certo. O problema acontece extamente qdo o nome do produto é retornando no txtProduto, pq coloquei o código no text_Changed do TextBox, ai ele retorna todos os dados menos o nome pq esta naquele evento. Alguém tem alguma solução? Já passou por isso, espero ajuda de todos
    Obrigado!






    terça-feira, 4 de março de 2008 01:32

Respostas

Todas as Respostas

  • Henry, bom dia!

    Já tentou usar o text_Leave: que é quando o controle perde o foco?
    terça-feira, 4 de março de 2008 12:52
  • Se colocar no Leave vou resolver o problema de qdo retornar a string ela não apagar mais?
    terça-feira, 4 de março de 2008 13:09
  • Pode ser que sim dependendo de como você implementou!

    Aproveitando:

    try{
    variavel x = Inte32.Parse(txtProduto.nome);
    }
    catch{
    txtProduto.Text = "";
    }

    A linha em negrito está mesmo correta?
    você tenta converter uma string para um inteiro?
    Se sim isso sempre dará erro, garanta que o valor passado pelo textbox seja realmente um número que possa ser convertido

    eu acho que esse seu try deve ser assim:

    Code Snippet

    try{

    variavel x = Int32.Parse(txtProduto.Text);

    }
    catch{
    txtProduto.Text = "";

    }


    Att,

    terça-feira, 4 de março de 2008 13:30
  • Opa!

    resolvi o problema de outra forma, usando outro evento junto com o changed
    terça-feira, 4 de março de 2008 17:00
  • Fico feliz que tenha conseguido Henry, Parabéns! Aquela correção do Try {} ajudou você?

    Att,
    terça-feira, 4 de março de 2008 17:26
  • Danilo,

    na verdade consegui não! mas o try estava certo eu que escrevi errdo, ainda espero ajuda. Estou programando para pocket
    terça-feira, 4 de março de 2008 17:36
  • Henry,

    Teria como vc passar o trecho do código que está dando erro junto do erro propriamente dito?
    terça-feira, 4 de março de 2008 17:42
  • Agora,

    segue ai com estou fazendo


    private void txtProduto_TextChanged_1(object sender, EventArgs e)
            {

                if (txtProduto.Text != "")
                {
                    try
                    {
                        idestoquepesquisa = Int32.Parse(txtProduto.Text.Trim());
                    }
                    catch
                    {
                        txtProduto.Text = " ";
                    }
                }
                   
               
            }

    esse uso para saber se é numero ou string


    private void txtProduto_Validating(object sender, CancelEventArgs e)
            {
                if (txtProduto.Text != " ")
                {
                    estoque = new Controladores.Estoque().PesquisaProdutoEstoqueID(idestoquepesquisa);
                    //txtProduto.Text = estoque.Produto.Nome;
                    string nomeproduto = estoque.Produto.Nome;
      txtProduto.Text = nomeproduto;              
    txtProduto.Enabled = true;
                 
                   
                    lblArmagem.Text = Convert.ToString(estoque.Quantidade_Armagem);
                    lblCaminhao.Text = Convert.ToString(estoque.Quantidade_Caminhao);
                    estoque.Id = idestoquepesquisa;
                   
                   
                    if (estoque.Id == 0)
                    {
                        MessageBox.Show("Favor Digitar outro Código de Produto", "Atenção!");
                        txtProduto.Enabled = false;
                        txtProduto.Focus();
                    }

                }
            }



    esse aqui uso para validar e atribuir a ao meus campos, so que quando chega no   txtProduto.Text = nomeproduto ele volta para o changed limpando meu campo

    terça-feira, 4 de março de 2008 18:10
  • Henry você está usando o mesmo campo para pesquisar por nome e por id do produto?

    Quando você executa essa linha, ocorre o problema:

    txtProduto.Text = estoque.Produto.Nome;

    porque na hora que você atribui um novo valor ao campo o processamento chama o evento change(mudar) que por sua vez chama o evento changed(mudado) e o seu evento changed  executa o seu try {} no try você testa se a propriedade text é um número válido para conversão, caso não no catch {} você limpa o seu campo e é aí que está problema! Problema encontrado a solução não coloque nada no catch {} deixe ele em branco e teste!

    ficaria mais ou menos assim:

    private void txtProduto_TextChanged_1(object sender, EventArgs e)
    {

                if (txtProduto.Text != "")
                {
                    try
                    {
                        idestoquepesquisa = Int32.Parse(txtProduto.Text.Trim());
                    }
                    catch
                    {

                    }
                }
                  
              
    }


    private void txtProduto_Validating(object sender, CancelEventArgs e)
    {
                if (txtProduto.Text != " ")
                {
                    estoque = new Controladores.Estoque().PesquisaProdutoEstoqueID(idestoquepesquisa);

                    txtProduto.Text = estoque.Produto.Nome;
            txtProduto.Enabled = true;
                
                  
                    lblArmagem.Text = Convert.ToString(estoque.Quantidade_Armagem);
                    lblCaminhao.Text = Convert.ToString(estoque.Quantidade_Caminhao);
                    estoque.Id = idestoquepesquisa;
                  
                  
                    if (estoque.Id == 0)
                    {
                        MessageBox.Show("Favor Digitar outro Código de Produto", "Atenção!");
                        txtProduto.Enabled = false;
                        txtProduto.Focus();
                    }

                }
    }



    Para você ir passa-a-passo entrando nos métodos que são chamados por outros métodos use a tecla F11.
    Att,

    terça-feira, 4 de março de 2008 18:27
  • é verdade, debuguei aqui passo a passo. mas resolvi mudei tudo pro Validating. Agora está resolvido
    terça-feira, 4 de março de 2008 18:48
  • Agora deu tudo certo então, fico feliz, parabéns!

    Até a próxima!

    Att,
    terça-feira, 4 de março de 2008 18:50
  • Obrigado,

    tem como me add no msn, talk ou qualquer coisa ai

    henry.charriere@gmail.com
    henrytelecom@hotmail.com
    terça-feira, 4 de março de 2008 19:12
  • Já está added no gtalk que eu uso mais! Até...
    terça-feira, 4 de março de 2008 19:32