book-openErrorProvider

Validarea datelor introduse de utilizator se face în FormAngajat, nu în Form1. Motivul este simplu: FormAngajat știe ce câmpuri are și ce reguli trebuie respectate. Form1 nu ar trebui să aibă acces direct la câmpurile din FormAngajat și nici să cunoască regulile de validare.

Structura corectă:

btnOk_Click (FormAngajat)
  -> Valideaza()
      -> daca esueaza: marcheaza campul, afiseaza eroarea, return false
      -> daca trece: return true
  -> daca Valideaza() returneaza false: return (formularul ramane deschis)
  -> construieste AngajatRezultat
  -> this.DialogResult = DialogResult.OK (formularul se inchide)

Validare simplă cu MessageBox

Varianta de bază: verifici câmpurile în ordine și afișezi un MessageBox la prima eroare găsită:

private bool Valideaza()
{
    if (string.IsNullOrWhiteSpace(txtNume.Text))
    {
        MessageBox.Show("Numele este obligatoriu.", "Eroare",
            MessageBoxButtons.OK, MessageBoxIcon.Warning);
        txtNume.Focus();
        return false;
    }

    if (string.IsNullOrWhiteSpace(txtPrenume.Text))
    {
        MessageBox.Show("Prenumele este obligatoriu.", "Eroare",
            MessageBoxButtons.OK, MessageBoxIcon.Warning);
        txtPrenume.Focus();
        return false;
    }

    if (cmbDepartament.SelectedItem == null)
    {
        MessageBox.Show("Selecteaza un departament.", "Eroare",
            MessageBoxButtons.OK, MessageBoxIcon.Warning);
        cmbDepartament.Focus();
        return false;
    }

    decimal salariu;
    if (!decimal.TryParse(txtSalariu.Text.Trim(), out salariu) || salariu <= 0)
    {
        MessageBox.Show("Salariul trebuie sa fie un numar pozitiv.", "Eroare",
            MessageBoxButtons.OK, MessageBoxIcon.Warning);
        txtSalariu.Focus();
        txtSalariu.SelectAll();
        return false;
    }

    return true;
}

Această variantă funcționează, dar afișează o fereastră de dialog separată pentru fiecare eroare. Utilizatorul trebuie să dea OK, să corecteze, să dea OK din nou etc.


ErrorProvider — validare inline

ErrorProvider este un component care afișează o iconița roșie de eroare direct lângă controlul cu problema, fără ferestre de dialog suplimentare. Experiența utilizatorului este mai fluentă: vede toate erorile simultan și le poate corecta fără întreruperi.

Adăugarea în Designer

ErrorProvider se adaugă din Toolbox — nu este un control vizibil, ci un component care apare în bara de componente sub formular.

📸 SCREENSHOT: Designer-ul FormAngajat cu ErrorProvider adăugat. Arată bara de componente de sub formular cu errorProvider1 vizibil. Evidențiați că ErrorProvider nu apare pe suprafața formularului, ci în zona de componente.

Utilizarea în cod

Validare completă cu ErrorProvider

Spre deosebire de validarea cu MessageBox, nu mai oprești la prima eroare — verifici toate câmpurile și marchezi toate problemele simultan:

📸 SCREENSHOT: FormAngajat cu ErrorProvider activ: câmpul Nume gol cu iconița roșie de eroare vizibilă în dreapta lui, și tooltip-ul de eroare afișat la hover. Dacă poți, arată mai multe câmpuri cu erori simultan.


Ștergerea erorilor la modificare

O îmbunătățire de UX: ștergi eroarea de pe un câmp imediat ce utilizatorul începe să corecteze:

Sau mai concis, cu sender:


Validarea numerelor cu TryParse

Câmpurile pentru numere (Salariu) sunt TextBox-uri care conțin text. Conversia se face cu TryParse — mai sigur decât Parse deoarece nu aruncă excepție:

Last updated