GroupBox este un container care grupează controale înrudite. Afișează un chenar cu un titlu și comunică utilizatorului că elementele din interior formează o unitate logică. Nu are o funcție de procesare a datelor. Rolul său este exclusiv de organizare vizuală și de structurare a interfeței.
Proprietăți esențiale
grpDateContact.Text="Date contact";// titlul afisat pe chenargrpDateContact.Enabled=false;// dezactiveaza toate controalele din interior
Proprietatea Enabled pe un GroupBox are un efect de grup: când o setezi pe false, toate controalele din interiorul lui devin automat dezactivate, fără a fi nevoie să le dezactivezi individual. Aceasta este o modalitate convenabilă de a bloca o secțiune întreagă a formularului în timp ce se procesează o operație.
Adăugarea controalelor în GroupBox
În Designer, tragi controalele direct în interiorul GroupBox-ului. Dacă plasezi un control în afara lui și vrei să-l muți înăuntru, tai cu Ctrl+X și lipești cu Ctrl+V cu GroupBox-ul selectat.
Un semn că un control aparține GroupBox-ului: dacă muți GroupBox-ul pe formular, controalele din interior se mută odată cu el. Dacă un control rămâne pe loc la mutarea GroupBox-ului, înseamnă că nu a fost adăugat corect în container.
CheckBox
CheckBox reprezintă o opțiune binară: bifat sau nebifat. Utilizatorul poate schimba starea dând click pe el. Este controlul potrivit pentru orice setare care poate fi activată sau dezactivată independent de alte setări.
Starea curentă a unui CheckBox se citește prin proprietatea Checked, care returnează bool. Aceasta este valoarea pe care o transmiți obiectului de date la construcție:
Evenimentul CheckedChanged
Se declanșează când utilizatorul bifează sau debifează controlul. Util când vrei să reacționezi imediat la schimbarea stării, de exemplu pentru a activa sau dezactiva alte controale din formular:
Dacă nu ai nevoie să reacționezi în timp real la schimbarea stării, nu este obligatoriu să abonezi acest eveniment. Poți citi Checked direct când ai nevoie de valoare, de exemplu la click pe butonul de adăugare.
MessageBox
MessageBox este o fereastră de dialog predefinită de sistem care afișează un mesaj și opțional solicită o decizie din partea utilizatorului. Nu se instanțiază cu new, ci se apelează static prin MessageBox.Show(...).
Un MessageBox deschis blochează interacțiunea cu restul aplicației până când utilizatorul îl închide. Acesta este comportamentul dorit: pentru erori de validare și cereri de confirmare, utilizatorul trebuie să răspundă înainte să continue.
Forma simplă
Această formă afișează mesajul cu titlul implicit al aplicației și un singur buton OK.
Cu titlu și icon
Parametrii sunt în ordine: mesajul, titlul ferestrei, butoanele afișate, iconul. Toți parametrii după mesaj sunt opționali, dar includerea lor face dialogul mai informativ și mai profesional.
Valorile MessageBoxIcon
Alegerea iconului potrivit este importantă pentru experiența utilizatorului: Warning pentru validări care nu blochează complet operația, Error pentru probleme care o blochează, Question pentru cereri de confirmare, Information pentru mesaje neutre.
Cu butoane multiple si DialogResult
Când afișezi un MessageBox cu mai mult de un buton, trebuie să captezi răspunsul utilizatorului. Valoarea returnată de MessageBox.Show este de tip DialogResult:
Valorile MessageBoxButtons
Valorile DialogResult
Valorile disponibile corespund butoanelor afișate. Dacă utilizatorul apasă Yes, rezultatul este DialogResult.Yes; dacă apasă No, rezultatul este DialogResult.No.
Combinarea celor trei controale in exercitiu
În registrul de contacte, GroupBox, CheckBox și MessageBox lucrează împreună cu roluri complementare. GroupBox grupează vizual câmpurile de introducere a datelor. CheckBox permite setarea opțiunii NotificariActive fără câmpuri text suplimentare. MessageBox protejează împotriva acțiunilor greșite: afișează erori de validare și cere confirmare înainte de ștergere.
Un exemplu complet al operației de ștergere cu confirmare:
Observați că handler-ul btnSterge_Click nu conține nicio logică propriu-zisă, ci apelează metoda StergeContact(). Aceasta este separarea de responsabilitate tratată în detaliu în capitolul următor.
Contact c = new Contact
{
Nume = txtNume.Text.Trim(),
Prenume = txtPrenume.Text.Trim(),
Telefon = txtTelefon.Text.Trim(),
Email = txtEmail.Text.Trim(),
NotificariActive = chkNotificari.Checked
};
private void chkNotificari_CheckedChanged(object sender, EventArgs e)
{
if (chkNotificari.Checked)
lblStatus.Text = "Notificarile vor fi activate pentru acest contact.";
else
lblStatus.Text = "Notificarile sunt dezactivate.";
}
MessageBox.Show("Contactul a fost adaugat cu succes.");
MessageBox.Show(
"Numele este obligatoriu.",
"Eroare de validare",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
MessageBoxIcon.Information // cerc albastru cu litera i
MessageBoxIcon.Warning // triunghi galben cu semnul !
MessageBoxIcon.Error // cerc rosu cu semnul X
MessageBoxIcon.Question // cerc albastru cu semnul intrebarii
DialogResult rezultat = MessageBox.Show(
"Esti sigur ca vrei sa stergi contactul \"" + contact.Prenume + " " + contact.Nume + "\"?",
"Confirmare stergere",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (rezultat == DialogResult.Yes)
{
contacte.Remove(contact);
RefreshLista();
lblStatus.Text = "Contact sters. Total: " + contacte.Count + " contacte.";
}
// Daca rezultat == DialogResult.No, nu facem nimic, utilizatorul a anulat
MessageBoxButtons.OK // un singur buton OK
MessageBoxButtons.OKCancel // OK si Cancel
MessageBoxButtons.YesNo // Yes si No
MessageBoxButtons.YesNoCancel // Yes, No si Cancel
MessageBoxButtons.RetryCancel // Retry si Cancel