book-openDialogResult

DialogResult este o enumerație care reprezintă răspunsul unui formular modal la întrebarea implicită pe care o pune utilizatorului: „confirmi sau anulezi?". Fiecare buton de pe formular poate fi configurat să seteze un anumit DialogResult la apăsare, ceea ce închide automat formularul și returnează valoarea respectivă apelantului.

// In Form1, dupa ShowDialog():
using (FormAngajat f = new FormAngajat(null))
{
    DialogResult rezultat = f.ShowDialog();

    if (rezultat == DialogResult.OK)
        angajati.Add(f.AngajatRezultat);
    // daca Cancel, nu facem nimic
}

Valorile DialogResult

DialogResult.OK       // utilizatorul a confirmat
DialogResult.Cancel   // utilizatorul a anulat sau a inchis cu X
DialogResult.Yes      // pentru YesNo
DialogResult.No       // pentru YesNo
DialogResult.Retry    // pentru RetryCancel
DialogResult.Abort    // pentru AbortRetryIgnore
DialogResult.Ignore   // pentru AbortRetryIgnore
DialogResult.None     // formularul nu a fost inca inchis

În aplicații cu formulare de adăugare/editare, OK și Cancel sunt suficiente în aproape toate cazurile.

Setarea DialogResult din cod

Atribuirea unui DialogResult pe formular îl închide automat:

Dacă utilizatorul închide fereastra cu butonul X din bara de titlu, DialogResult devine automat Cancel. Acest comportament implicit este exact ce vrem.

AcceptButton și CancelButton

Două proprietăți ale Form simplifică interacțiunea cu tastatura:

AcceptButton — butonul activat când utilizatorul apasă Enter, indiferent de controlul cu focus:

CancelButton — butonul activat când utilizatorul apasă Escape:

Se setează din fereastra Properties a formularului sau din cod după InitializeComponent(). Cu aceste două setate, utilizatorul poate confirma cu Enter și anula cu Escape fără să dea click pe butoane.

📸 SCREENSHOT: Fereastra Properties a FormAngajat cu proprietățile AcceptButton și CancelButton evidențiate și valorile btnOk și btnAnuleaza selectate din dropdown.

Un detaliu important: dacă btnOk are DialogResult = OK setat din Designer (în Properties → DialogResult), apăsarea lui închide formularul fără să treacă prin btnOk_Click. Acesta este comportamentul nedorit când ai validare — validarea nu ar mai rula.

Soluția: lasă btnOk.DialogResult = None în Designer și setează this.DialogResult = DialogResult.OK manual în handler, după validare:

📸 SCREENSHOT: Fereastra Properties a btnOk cu proprietatea DialogResult evidențiată și valoarea setată la None. Adaugă o notă că aceasta este setarea corectă când ai validare în handler.

Ciclul de viață al unui formular secundar

Un formular deschis cu ShowDialog() parcurge acești pași:

Un aspect important: după ce ShowDialog() returnează, obiectul formularului nu a dispărut — el există în memorie până la Dispose(). Poți accesa proprietăți publice ale lui, inclusiv AngajatRezultat, cât timp ești în blocul using:

FormClosing în formularul secundar

Dacă vrei să interzici închiderea cu X fără confirmare, te abonezi la FormClosing:

Last updated