Inquiridor
Retornar o foco ao textbox anterior

Pergunta
-
Todas as Respostas
-
-
-
-
-
-
-
-
-
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.
-
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.
-
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.
-
-
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.
- Editado LeonardoBastos terça-feira, 9 de abril de 2019 00:44
-
-
-
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
-
-
-
-
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();
} -
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.
-
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.
-
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
-
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.