Reutilizarea unui formular pentru adăugare și editare
Adăugarea și editarea unui angajat sunt aproape identice ca interfață: același set de câmpuri, aceeași validare, aceleași butoane. Diferența este că la editare câmpurile vin precompletate și la confirmare se actualizează un obiect existent, nu se creează unul nou.
A crea două formulare separate (FormAdaugaAngajat și FormEditeazaAngajat) înseamnă să duplicăm layout-ul, controalele și validarea. Orice modificare ulterioară — un câmp nou, o regulă de validare schimbată — trebuie aplicată în două locuri.
Soluția este un singur FormAngajat care știe în ce mod funcționează în funcție de ce primește în constructor.
Constructorul cu parametru opțional
FormAngajat primește un Angajat prin constructor. Convenția: null înseamnă adăugare, un obiect înseamnă editare.
publicpartialclassFormAngajat:Form{ // Stocam referinta la angajatul de editat (null daca adaugam)privateAngajatangajatDeEditat; // Proprietatea publica prin care Form1 citeste rezultatulpublicAngajatAngajatRezultat{get;privateset;}publicFormAngajat(Angajatangajat){InitializeComponent();angajatDeEditat=angajat;}}
Completarea câmpurilor în Form_Load
Logica de inițializare a câmpurilor se pune în evenimentul Load, nu în constructor. La momentul constructorului, controalele există (au fost create de InitializeComponent()), dar formularul nu este încă afișat. Load este momentul potrivit pentru setup vizual.
📸 SCREENSHOT: Două instanțe ale FormAngajat alăturate: una în modul „Angajat nou" cu câmpuri goale, una în modul „Editează angajat" cu câmpuri precompletate. Arată că titlul ferestrei diferă și că datele din modul editare corespund unui angajat din grid.
Construirea AngajatRezultat la confirmare
La click pe btnOk, dacă validarea trece, construim obiectul rezultat și setăm DialogResult:
Creăm întotdeauna un obiect nou, indiferent de modul de funcționare. Nu modificăm angajatDeEditat direct — Form1 decide ce face cu AngajatRezultat.
Utilizarea în Form1 — adăugare vs. editare
Diferența dintre adăugare și editare este în Form1, nu în FormAngajat:
De ce AngajatRezultat este un obiect nou
Ai putea fi tentat să modifici direct angajatDeEditat în FormAngajat:
Problema: dacă utilizatorul apasă Cancel după ce a modificat câmpurile, angajatDeEditat a fost deja modificat în memorie, chiar dacă nu voia să salveze. Creând un obiect nou și returnându-l prin AngajatRezultat, Form1 aplică modificările numai dacă DialogResult == OK.