Stack Overflow em Português Asked by Rayra on November 5, 2021
O formulário seguinte não abre quando a senha está correta e se está errada continua passando mesmo se a senha tiver digitada 3 vezes.
private void btnEntrar_Click(object sender, EventArgs e)
{
int erro=0;
if (senha != "")
{
while(erro<=2)
{
String verifica = txtVerifica.Text;
if (verifica == senha)
{
if (Application.OpenForms.OfType<Desenvolvimento>().Count() > 0)
{
Form desenvolvimento = Application.OpenForms["Desenvolvimeto"];
desenvolvimento.Show();
this.Hide();
}
else
{
Desenvolvimento desenvolvimento = new Desenvolvimento();
desenvolvimento.Show();
this.Hide();
}
}
else
{
if (erro == 3)
{
MessageBox.Show("Três tentativas !");
Application.Exit();
}
else
{
erro=erro+1;
MessageBox.Show("Senha inválida !");
break;
}
}
}
}
else
{
MessageBox.Show("Cadastre uma senha !");
txtSenha.Focus();
}
}
O o problema é que a lógica não deve ser dentro deste método, é uma lógica para todo o formulário e o controle de tentativas deve ser no objeto e não no método. Tirando essa variável funciona. E dá para fazer várias simplificações. Algumas coisas ainda podem ser melhoradas.
private int tentativasErradas = 0;
private void btnEntrar_Click(object sender, EventArgs e) {
if (senha != "") {
if (txtVerifica.Text == senha) {
Form desenvolvimento = Application.OpenForms.OfType<Desenvolvimento>().Any() ? Application.OpenForms["Desenvolvimeto"] : new Desenvolvimento();
desenvolvimento.Show();
this.Hide();
} else {
if (tentativasErradas == 3) {
MessageBox.Show("Três tentativas !");
Application.Exit();
} else {
tentativasErradas++;
MessageBox.Show("Senha inválida !");
}
}
} else {
MessageBox.Show("Cadastre uma senha !");
txtSenha.Focus();
}
}
Answered by Maniero on November 5, 2021
O porque de "continua passando mesmo se a senha tiver digitada 3 vezes".
Sempre que o utilizador carrega no botão que gera o evento btnEntrar_Click()
, logo na primeira linha, passas o erro = 0
, o que faz com que seja sempre a "primeira vez". Mesmo que o utilizador esteja a entrar pela 100ª vez, o erro vai estar sempre a ser reposto para 0. É uma falha da tua parte.
Tira essa variável do evento do botão.
static int erro = 0;
E sempre que o utilizador errar na palavra-chave incrementas.
Algo deste género.
class Program
{
static int erro = 0;
private void btnEntrar_Click(object sender, EventArgs e)
{
erro++;
if(erro < 3)
{
//utilizador ainda não falhou 3 vezes
}
else
{
//utilizador falhou 3 vezes (ou mais)
}
}
}
Como vez, a diferença é que o erro=0
não esta a ser reposto para 0 no evento do botão.
Answered by zakharuk_pasha on November 5, 2021
Toda vez que você executa a função btnEntrar_Click();
a variável int erro=0;
novamente recebe o valor zero. Experimente declarar a variável no corpo de sua classe dessa forma:
class Program
{
static int erro;
static void Main(string[] args)
{
Menu();
}
}
Não se esqueça de incrementar a variável caso seu algoritmo identifique um erro na autenticação dessa forma:
erro++;
Answered by Guilherme Lima on November 5, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP