luni, 7 martie 2016

C#17 Controlul TextBox

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");
        }
    }
}


Niciun comentariu:

Trimiteți un comentariu