none
Qual evento devo usar ? RRS feed

  • Pergunta

  •  Bom dia

    Estou com a seguinte duvida,  tenho um textbox1 e preciso atualizar o valor de outro  textbox2 só que isso deve acontecer de forma imediata ou seja de acordo com que vou digitando no textbox1 o valor textbox2 vai mudando. O textbox1 esta recebendo o desconto e o textbox2 é o valor apagar;

    Bem já tentei alguns eventos como Leave, keyPress, Enter e outros mais nenhum deu o resultado descrito acima.
    Alguém sabe outro?

    Ainda não conseguir solucionar o meu problema!!

    Desde já agradeço. 


    segunda-feira, 8 de junho de 2015 12:27

Respostas

  • Boa tarde.

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso haja necessidade, favor abrir uma nova.

    Excelente tarde.

    • Marcado como Resposta Cristopher C I_ sexta-feira, 19 de junho de 2015 17:35
    quinta-feira, 18 de junho de 2015 19:41

Todas as Respostas

  • Bom dia, tentou usar o evento TextChanged?

    Abraço!



    segunda-feira, 8 de junho de 2015 12:38
  • Use o TextChanged

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 8 de junho de 2015 12:41
  • Bruno Maschio Joaquim e Mr. GMSOFT

    Quando eu uso o  TextChanged e da um erro antes de abrir o formulário erro de conversão de caracteres o código que estou usando é este aqui:

     private void txtValorDesconto_TextChanged(object sender, EventArgs e)
            {
    
                //double desconto = Convert.ToDouble(txtValorDesconto.Text);
                retiraMascara(txtvalor);
                double valor = Convert.ToDouble(txtvalor.Text);
                double resultado = valor - Convert.ToDouble(txtValorDesconto.Text);
                txtvalor.Text = resultado.ToString("C");
                txtValorDesconto.Text = Convert.ToDouble(txtValorDesconto.Text).ToString("C");
    
    
            }
    Da o erro no txtValorDesconto.Text;



    segunda-feira, 8 de junho de 2015 12:58
  • Olá, o valor desse teu textBox não está chegando vazio na hora de realizar a conversão?

    Para evitar problema de conversões, tente usar o método Double.TryParse, esse método ele verifica se é possível fazer a conversão do valor antes de realizar o mesmo.

    Segue abaixo a modificação do seu código usando double.TryParse:

    //double desconto = Convert.ToDouble(txtValorDesconto.Text);
                retiraMascara(txtvalor);
    
                double valor = 0d;
                double valorDesconto = 0d;
                double resultado = 0d;
    
                if (double.TryParse(txtvalor.Text, out valor) && double.TryParse(txtValorDesconto.Text, out valorDesconto))
                {
                    resultado = valor - valorDesconto;
    
                    txtvalor.Text = resultado.ToString("C");
                    txtValorDesconto.Text = valorDesconto.ToString("C");
                }
                else
                {
                    //TODO: Tratar caso a conversão seja invalida.
                }

    Abraço!



    segunda-feira, 8 de junho de 2015 13:02
  • Você esta atribuindo um double para uma variavel string, tem que converter para string e não double

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 8 de junho de 2015 13:04
  • Bruno Maschio Joaquim

    É verdade assim da certinho, não abusando a sua boa vontade mas tirando uma duvida quando eu limpo o txtValorDesconto  o txtValor deve voltar para o valor que era antes ou seja o valor de origem dele isto eu ainda não consegui fazer, tentei desta forma :

      retiraMascara(txtvalor);
    
                double valorTotal = 0d;
                double valorDesconto = 0d;
                double resultado = 0d;
    
                if (double.TryParse(txtvalor.Text, out valorTotal) && double.TryParse(txtValorDesconto.Text, out valorDesconto))
                {
                    if (valorDesconto > 0)
                    {
                        resultado = valorTotal - valorDesconto;
    
                        txtvalor.Text = resultado.ToString("C");
                        txtValorDesconto.Text = valorDesconto.ToString("C");
                    }
    
                    else {
    
                        pegadados();
                        txtvalor.Text = valor;
                    }
                }
                else
                {
                    //TODO: Tratar caso a conversão seja invalida.
                }
    

     

    segunda-feira, 8 de junho de 2015 13:42
  • Se o valor da variável "valor" estiver com o valor antigo, é isso mesmo.

    Se a resposta de ajudou, não esqueça de marcar como resposta.

    Abraço!

    segunda-feira, 8 de junho de 2015 13:47
  • Bruno Maschio Joaquim

    Mas então desta forma não esta voltado sera que não devo usar o evento keyPress  para volta para o valor antigo ?

    segunda-feira, 8 de junho de 2015 14:01
  • Tu teria que armazenar em uma variável global o último valor do txtValor, dai quando tu alterar o texto do desconto, tu verifica se o valor é vazio e restaura o valor do txtValor com o valor armazenado na variável global.


    segunda-feira, 8 de junho de 2015 14:39
  • Bruno Maschio Joaquim

    Então a variável global eu já tenho com o valor a questão é que não esta caindo no else, da uma olhada :

     retiraMascara(txtvalor);
               
                double valorTotal = 0d;
                double valorDesconto = 0d;
                double resultado = 0d;
    
                if (double.TryParse(txtvalor.Text, out valorTotal) && double.TryParse(txtValorDesconto.Text, out valorDesconto))
                {
                    if (valorDesconto > 0)
                    {
                        resultado = valorTotal - valorDesconto;
    
                        txtvalor.Text = resultado.ToString("C");
                        txtValorDesconto.Text = valorDesconto.ToString("C");
                    }
                    else {
                        MessageBox.Show("vazio");
                        pegadados();
                        txtvalor.Text = valor;
                    
                    }
    
                    if (txtValorDesconto.Text ==""){
                        MessageBox.Show("vazio");
    
                        pegadados();
                        txtvalor.Text = valor;
                    }
                }
                else
                {
                    //TODO: Tratar caso a conversão seja invalida.
                }
    

    segunda-feira, 8 de junho de 2015 14:51
  • Ele está entrando no primeiro if?
    segunda-feira, 8 de junho de 2015 14:54
  • Quando digito alguma coisa sim, mas quando eu limpo o text não entra  nenhum if no caso era para entra no if do text vazio  

    Antes de abrir o formulário ele entra no else, depois não entra mais!

    segunda-feira, 8 de junho de 2015 15:04
  • Tu tem que fazer o teste abaixo antes do if.

    if (txtValorDesconto.Text ==""){
                        MessageBox.Show("vazio");
    
                        pegadados();
                        txtvalor.Text = valor;
                    }

    Ele não entra no if por que o valor de algum textbox tá vindo vazio, fazendo com que ele não consiga converter para double.

    Colocando o código acima antes do if deve funcionar.

    Abraço!

    segunda-feira, 8 de junho de 2015 16:04
  • Bruno Maschio Joaquim

    Tem um problema neste método Double.TryParse não estou conseguindo colar centavos por R$ 2,30 já tentei troca por decimal mais continua do mesmo jeito, sera que você sabe o que pode ser ?

    Abraços

    segunda-feira, 8 de junho de 2015 18:21
  • Você pode usar a sobre-carga desse método que permite que você passe parâmetros do tipo NumberStyle, no qual você define propriedades do valor que será convertido, como moeda e  casas decimais, para mais informações leia essa Thread.

    Abraço!

    segunda-feira, 8 de junho de 2015 18:30
  • Bruno Maschio Joaquim

    Deixa eu explicar melhor o que esta acontecendo, por exemplo eu vou inserir o desconto de 2,20 no valor de 60,00 o resultado era para ser 57,80 certo!?

    Mais não esta sendo ele da o resultado de 51,80 ou seja ele esta tirando 2 ate chegar na segunda casa depois da virgula se eu uso a tecla backspace para apagar o resultado ele vai inserindo 2 ate limpar ou seja vai ficando 49,80 etc .

    Já testei em outro text para ver se era outro evento que estava influenciando mas não era.

    segunda-feira, 8 de junho de 2015 19:14
  • Olá Renatobe, fiz uma pequena aplicação aqui e parece que funcionou, segue abaixo código.

    private void txtDesconto_TextChanged(object sender, EventArgs e)
            {
                this.CalcularResultado();
            }
    
            private void txtValor_TextChanged(object sender, EventArgs e)
            {
                this.CalcularResultado();
            }
    
            private void CalcularResultado()
            {
                double valor;
                double desconto;
                double resultado;
    
                if(double.TryParse(this.txtValor.Text ,NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out valor) && 
                    double.TryParse(this.txtDesconto.Text ,NumberStyles.AllowDecimalPoint, CultureInfo.CurrentCulture, out desconto))
                {
                    resultado = valor - desconto;
                    this.label1.Text = resultado.ToString();
                }
                else
                {
                    this.label1.Text = "Alguma entrada inválida";
                }
            }

    Seria isso?

    Abraço!


    segunda-feira, 8 de junho de 2015 20:09
  • Error 4 The name 'CultureInfo' does not exist in the current context D:\ACADEMIA_ORIGINAL\ACADEMIA\FormEscolhaServiço.cs 423 85

    Uai que estranho o mesmo código seu a aqui da o seguinte erro !!! 


    segunda-feira, 8 de junho de 2015 20:28
  • Você tem que "Importar" a biblioteca que usa esse cara, coloca a linha de comando abaixo no início da tua classe junto com os outros 'usings'.

    using System.Globalization;

    segunda-feira, 8 de junho de 2015 20:30
  • Bruno Maschio Joaquim

    A biblioteca deu certo mas a conta ainda esta sendo feita de maneira erronia, não sei se tem algo haver acredito que não mas o valor eu estou pegando do banco e usando ele mesmo para pegar o resultado.

    O que esta acontecendo que ele não pega o numero inteiro que eu digito por exemplo vou digita 2,80 antes de terminar de digitar ele já joga o 2 na subtração, se digitar 0,80 a conta é feita normalmente.

    segunda-feira, 8 de junho de 2015 20:48
  •  Pessoal ainda não conseguir solucionar este problema.
    terça-feira, 9 de junho de 2015 15:12
  • Oi Renatobe, acho melhor você fazer outra pergunta com esse teu outro problema, assim fica mais visível para os usuários conseguirem lhe ajudar.

    Abraço

    terça-feira, 9 de junho de 2015 17:25
  • Boa tarde.

    Por falta de retorno do usuário, esta thread será encerrada.

    Caso haja necessidade, favor abrir uma nova.

    Excelente tarde.

    • Marcado como Resposta Cristopher C I_ sexta-feira, 19 de junho de 2015 17:35
    quinta-feira, 18 de junho de 2015 19:41