Inițiem un proiect de tip WFA. Tragem în forma Form1 trei controale TextBox, pe care le așezăm unul sub altul. În stânga fiecărui TextBox tragem câte un control Label. Sub ele așezăm un buton. Redenumim controalele din panoul Properties după cum urmează:
TextBox1 redenumim user
TextBox2 redenumim parola
RextBox3 redenumim cnp
Button1 inscripționăm cu textul autentif
schimbam textul afisat de etichetele label în:
label1... user name
label2... password
label3... CNP
Schimbăm numele Form1 în LogOn.
Dorim ca la incarcarea formei să nu se vada controalele CNP și autentif, iar controlul parola să fie inactiv. Codul pentru aceasta se introduce în metoda constructor a formei. Tot aici punem și codul care maschează cu * parola introdusă. Pentru a accesa editorul de cod aferent constructorului, facem dublu click pe formă. Noi scriem doar ce este cu Bold.
public Form1() //constructorul formei
{
InitializeComponent();
//caracterul * mascheaza parola
parola.PasswordChar = '*';
//campul parola initial dezactivat
parola.Enabled = false;
//campul cnp si butonul autentif initial invizibile
label3.Visible = false;
cnp.Visible = false;
autentif.Visible = false; }
Dorim să permitem logon doar utilizatorului Gogu. În practică, se utilizează o bază de date cu utilizatori, dar exemplul următor descrie metoda de principiu. Se utilizează metoda membru PreviewKeyDown. Navigarea între câmpuri se face cu tasta Tab, nu enter. Se poate testa însă opțional/alternativ și Enter.
private void user_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
//daca tasta apasata este Tab
if (e.KeyCode == Keys.Tab)
if (user.Text == "Gogu")
//user corect, activare camp parola
parola.Enabled = true;
else
MessageBox.Show("user incorect");
}
Verificăm introducerea parolei. Vom verifica dacă s-a introdus textul "parolaMea". În practică nu se folosește această metodă statică de verificare, în care valoarea parolei este fixată în sursa programului, deoarece este vulnerabilă la decodificare și în plus nu se permite schimbarea parolei.
dacă parola este corectă, se activează controlul cnp și autentif.
Metoda Focus selectează un control pentru a primi intrare de date. Selectarea se poate face manual cu mous-ul, cu săgețile, cu Tab sau prin program. Mai jos se focusează prin program. Ordinea implicită de selecție a controalelor este ordinea adăugării lor pe formă, dar se poate schimba din meniul View, TabIndex.
private void parola_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
//daca tasta apasata este Enter
if (e.KeyCode == Keys.Enter)
//daca s-a introdus textul "parolaMea"
if (parola.Text == "parolaMea")
{
//controlul CNP devine vizibil
label3.Visible = true;
cnp.Visible = true;
//controlul CNP primeste focusul
cnp.Focus();
//butonul autentif devine vizibil
autentif.Visible = true;
}
else
{
MessageBox.Show("Parola incorecta");
//sterge textul introdus
parola.Clear();
}
}
Pentru verificarea CNP-ului dorim să impunem două restricții: să conțină numai cifre, și să fie de lungime fix 13 caractere. În practică se folosește un algoritm de verificare a cifrelor de control. Ultimele 4 caractere din CNP sunt cifre de control, restul conțin data nașterii, codul sexului, codul județului.
private void cnp_KeyPress(object sender, KeyPressEventArgs e)
{
//daca nu e cifra, nu se proceseaza
if (e.KeyChar < 0x30 || e.KeyChar > 0x39)
e.Handled = true;
}
Evenimentul Click al butonului autentif verifică dacă cnp-ul are 13 cifre.
private void autentif_Click(object sender, EventArgs e)
{
//daca lungime CNP <>13
if (cnp.Text.Length != 13)
{
MessageBox.Show("CNP eronat");
//sterge textul introdus
cnp.Clear();
}
else
MessageBox.Show("Autentificare cu succes");
}
}
Programul complet este următorul:
namespace LogOn
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
//caracterul * mascheaza parola
parola.PasswordChar = '*';
//campul parola initial dezactivat
parola.Enabled = false;
//campul cnp si butonul autentif initial invizibile
label3.Visible = false;
cnp.Visible = false;
autentif.Visible = false;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void user_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
//daca tasta apasata este Tab
if (e.KeyCode == Keys.Tab)
if (user.Text == "Gogu")
//user corect, activare camp parola
parola.Enabled = true;
else
MessageBox.Show("user incorect");
}
private void parola_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
//daca tasta apasata este Enter
if (e.KeyCode == Keys.Enter)
//daca s-a introdus textul "parolaMea"
if (parola.Text == "parolaMea")
{
//controlul CNP devine vizibil
label3.Visible = true;
cnp.Visible = true;
//controlul CNP primeste focusul
cnp.Focus();
//butonul autentif devine vizibil
autentif.Visible = true;
}
else
{
MessageBox.Show("Parola incorecta");
//sterge textul introdus
parola.Clear();
}
}
private void cnp_KeyPress(object sender, KeyPressEventArgs e)
{
//daca nu e cifra, nu se proceseaza
if (e.KeyChar < 0x30 || e.KeyChar > 0x39)
e.Handled = true;
}
private void autentif_Click(object sender, EventArgs e)
{
//daca lungime CNP <>13
if (cnp.Text.Length != 13)
{
MessageBox.Show("CNP eronat");
//sterge textul introdus
cnp.Clear();
}
else
MessageBox.Show("Autentificare cu succes");
}
}
}