none
Retornar o foco ao textbox anterior RRS feed

  • Pergunta

  • Como faço para retornar o foco ao textbox anterior ?.

    Clicando no textbox ou com uma tecla de função (Esc), não está funcioando.

    Obrigado.


    • Editado GVGTEC sexta-feira, 5 de abril de 2019 03:27
    sexta-feira, 5 de abril de 2019 03:26

Todas as Respostas

  • Olá, "shift + tab" ou quer fazer por código ? não entendi bem "Clicando no textbox ou com uma tecla de função (Esc), não está funcioando."


    Se ajudou, marque como resposta! Obrigado.

    sexta-feira, 5 de abril de 2019 14:42
  • Olá Leonardo.

    Já testei com shift + tab não deu.

    O código está assim:

    if (e.KeyCode == Keys.Escape)
    {
         txtQuantidadePrd.Select();
    }

    Obrigado.

    sábado, 6 de abril de 2019 01:02
  • Olá, esse if tá no evento do Form, Textbox ou outro Control ?

    Explica qual a regra para "retornar o foco ao textbox anterior" e em qual textbox tá, pra qual quer ir...


    Se ajudou, marque como resposta! Obrigado.

    sábado, 6 de abril de 2019 01:42
  •         private void txtPrecoUnitario_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Escape)
                {
                    txtQuantidadePrd.Select();
                }
            }

    Mas quando pressiono ESC avança.

    • Editado GVGTEC sábado, 6 de abril de 2019 15:35
    sábado, 6 de abril de 2019 15:33
  • Olá, tenta o código...
    txtQuantidadePrd.Focus();


    Se ajudou, marque como resposta! Obrigado.

    sábado, 6 de abril de 2019 19:36
  • Com Focus() também não funcionou. Testei em outro form de cadastro e funcionou normalmente.

    domingo, 7 de abril de 2019 20:05
  • Olá, verifica se o textbox não tá readonly ou disabled...

    Se ajudou, marque como resposta! Obrigado.

    domingo, 7 de abril de 2019 21:48
  • Está habilitado. Recebe o foco normalmente e digito o valor só que quando teclo ESC o invés de retornar ao campo anterior ele avança.

    segunda-feira, 8 de abril de 2019 14:44
  • Olá, está complicado de entender o motivo de "não funcionar", mas vamos lá... vc quer que no txtPrecoUnitario ao pressionar Esc volte ao txtQuantidadePrd, certo? se sim, verifique para qual TextBox está focando ao pressionar Esc e procure no código se não tem nenhum lugar que esteja focando nesse TextBox... se não, explique com mais detalhes o cenário...


    Se ajudou, marque como resposta! Obrigado.

    segunda-feira, 8 de abril de 2019 15:08
  • Este é o form:

    Quando o foco está no Preço Unitário quero voltar para a Quantidade.

    private void txtPrecoUnitario_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Escape)
                {
                    txtQuantidadePrd.Focus();
                }
            }

            private void txtPrecoUnitario_Leave(object sender, EventArgs e)
            {
                if (txtPrecoUnitario.Text == "0,00")
                {
                    txtPrecoUnitario.Select();

                    return;
                }

                precototal = decimal.Parse(txtQuantidadePrd.Text) * decimal.Parse(txtPrecoUnitario.Text);

                txtPrecoTotal.Text = precototal.ToString();

                txtCodigoPrd.Focus();

                AdicionarItem();
            }

    Quando não utilizo o método Leave, funciona perfeitamente.


    segunda-feira, 8 de abril de 2019 16:28
  • Olá, certo, tenta o código...

    private bool bEsc = false;
    
    private void txtPrecoUnitario_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Escape)
                {
                    bEsc = true;
                    txtQuantidadePrd.Focus();
                }
            }
    
            private void txtPrecoUnitario_Leave(object sender, EventArgs e)
            {
                if (txtPrecoUnitario.Text == "0,00")
                {
                    txtPrecoUnitario.Select();
    
                    return;
                }
    
                precototal = decimal.Parse(txtQuantidadePrd.Text) * decimal.Parse(txtPrecoUnitario.Text);
    
                txtPrecoTotal.Text = precototal.ToString();
    
                if (!bEsc)
                   txtCodigoPrd.Focus();
                bEsc = false;
    
                AdicionarItem();
            }


    Se ajudou, marque como resposta! Obrigado.

    segunda-feira, 8 de abril de 2019 17:58
  • Efetuei as mudanças, segue o resultado:

    Preenchimento dos campos:

    Quando efetuado o preenchimento e avançado o erro não ocorre conforme abaixo:


    segunda-feira, 8 de abril de 2019 23:37
  • Olá, seu problema está na conversão do decimal.Parse... tenta o código...

    altera o código...

    precototal = decimal.Parse(txtQuantidadePrd.Text) * decimal.Parse(txtPrecounitario.Text));

    para...

    		decimal quantidadePrd = 0;
    		decimal.TryParse(txtQuantidadePrd.Text, out quantidadePrd);
    
    		decimal precounitario = 0;
    		decimal.TryParse(txtPrecounitario.Text, out precounitario);
    
    		precototal = quantidadePrd * precounitario;


    Se ajudou, marque como resposta! Obrigado.


    terça-feira, 9 de abril de 2019 00:43
  • Leonardo, fiz a alteração, não dá o erro mas não retorna para quantidade.
    terça-feira, 9 de abril de 2019 01:26
  • Olá, remove a linha...


    Se ajudou, marque como resposta! Obrigado.

    terça-feira, 9 de abril de 2019 01:39
  • Fiz outra alteração e parece que agora deu certo.

    private void txtPrecoUnitario_Leave(object sender, EventArgs e)
            {
                if (bEsc)
                {
                    txtQuantidadePrd.Focus();

                    bEsc = false;

                    return;
                }

                if (txtPrecoUnitario.Text == "0,00")
                {
                    txtPrecoUnitario.Select();

                    return;
                }

    Vou testar direitinho e te aviso.

    Muito obrigado.

    • Editado GVGTEC terça-feira, 9 de abril de 2019 01:50
    terça-feira, 9 de abril de 2019 01:49
  • Marque as respostas que te ajudaram... 

    Se ajudou, marque como resposta! Obrigado.

    terça-feira, 9 de abril de 2019 01:58
  • Olá Leonardo.

    O cliente testou e deu certo. Só um detalhe, ao invés da tecla ESC, se clicar com o mouse sobre o Textbox Quantidade o foco vai para o Textbox Codigo do Produto.

    terça-feira, 9 de abril de 2019 14:19
  • Olá, amigo não é a melhor pratica ficar usando o Focus no Leave do Control... mostra como tá seu código do Leave...


    Se ajudou, marque como resposta! Obrigado.

    terça-feira, 9 de abril de 2019 14:42
  •         private void txtQuantidadePrd_Leave(object sender, EventArgs e)
            {
                if (txtQuantidadePrd.Text == "")
                    txtQuantidadePrd.Select();
            }

            private void txtPrecoUnitario_Leave(object sender, EventArgs e)
            {
                if (bEsc)
                {
                    txtQuantidadePrd.Focus();

                    bEsc = false;

                    return;
                }

                if (txtPrecoUnitario.Text == "0,00")
                {
                    txtPrecoUnitario.Select();

                    return;
                }

                decimal quantidadePrd = 0;
                decimal.TryParse(txtQuantidadePrd.Text, out quantidadePrd);

                decimal precounitario = 0;
                decimal.TryParse(txtPrecoUnitario.Text, out precounitario);

                precototal = quantidadePrd * precounitario;

                txtPrecoTotal.Text = precototal.ToString();

                AdicionarItem();

                txtCodigoPrd.Focus();
            }
    terça-feira, 9 de abril de 2019 15:08
  • Olá, qual é o próximo Control após o txtPrecoUnitario? é o txtTotal ou ButtonAddItem... tentá o código...

            private void txtPrecoUnitario_Leave(object sender, EventArgs e)
            {
                if (bEsc)
                {
                    txtQuantidadePrd.Focus();
    
                    bEsc = false;
    
                    return;
                }
    
                if (txtPrecoUnitario.Text == "0,00")
                {
                    txtPrecoUnitario.Select();
    
                    return;
                }
    
                decimal quantidadePrd = 0;
                decimal.TryParse(txtQuantidadePrd.Text, out quantidadePrd);
    
                decimal precounitario = 0;
                decimal.TryParse(txtPrecoUnitario.Text, out precounitario);
    
                precototal = quantidadePrd * precounitario;
    
                txtPrecoTotal.Text = precototal.ToString();
    
                if (this.ActiveControl == SEU_PROXIMO_CONTROL)
                {
                    AdicionarItem();
    
                    txtCodigoPrd.Focus();
                }
            }


    Se ajudou, marque como resposta! Obrigado.

    terça-feira, 9 de abril de 2019 16:11
  • Desculpa a demora em responder Leonardo.

    Fiz a alteração e funcionou perfeitamente.

    Leonardo existe uma lógica para tudo isto. Talvez por causa da minha pouca experiência achei bem complexa a solução. No meu entendimento bastaria alterar o foco e estaria resolvido.

    Outra coisa. "não é a melhor pratica ficar usando o Focus no Leave do Control...."

    O que quer dizer ?. Haveria outra maneira.

    Mas agradeço enormemente a atenção e a ajuda.

    quarta-feira, 10 de abril de 2019 01:52
  • Retificando Leonardo.

    Deu certo o click no campo quantidade, mas agora não consigo confirmar todos os campos com Enter para adicionar o produto no GridView, somente clicando no botão + Item.

    Vou continuar testando te informo.


    • Editado GVGTEC quarta-feira, 10 de abril de 2019 02:50
    quarta-feira, 10 de abril de 2019 02:50
  • Olá, ao meu ver, se vc navega com o Enter, removeria o Evento Leave e incluiria o Evento KeyDown... tenta o código...

            private void txtPrecoUnitario_KeyDown(object sender, EventArgs e)
            {
    			if (e.KeyCode == Keys.Enter)
    			{
    				if (txtPrecoUnitario.Text == "0,00" || string.IsNullOrEmpty(txtPrecoUnitario.Text))
    				{
    					txtPrecoUnitario.Select();
    
    					return;
    				}
    
    				decimal quantidadePrd = 0;
    				decimal.TryParse(txtQuantidadePrd.Text, out quantidadePrd);
    
    				decimal precounitario = 0;
    				decimal.TryParse(txtPrecoUnitario.Text, out precounitario);
    
    				precototal = quantidadePrd * precounitario;
    
    				txtPrecoTotal.Text = precototal.ToString();
    
    				AdicionarItem();
    
    				txtCodigoPrd.Focus();
    			}
            }


    Se ajudou, marque como resposta! Obrigado.

    quarta-feira, 10 de abril de 2019 12:17