[C#, WinForms] Exemple cu Form.DialogResult, Button.DialogResult și Form.ShowDialog

Intr-un Form afișat folosind metoda ShowDialog() putem crea un buton, programatic sau in designer, si sa-i dam o valoare proprietatii lui numita DialogResult care se returneaza din apelul ShowDialog:

Button btnOK = new Button()
{
    // ...
    DialogResult = DialogResult.OK,
    // ...
};

Dar putem in loc ca în handler-ul evenimentului Click al butonului respectiv sa setam proprietatea „DialogResult” a Form-ului pe care trebuie sa il inchida la, de exemplu, DialogResult.OK si atunci Form-ul nostru se inchide automat si metoda ShowDialog a Form-ului returneaza DialogResult.OK.

DialogResult este o enumerare care are elemente precum: Cancel, Yes, No, OK și None.

Capturi de ecran

Form1

Design

Cod din spate



Form2

Design

Cod din spate


Programul rulând

Fereastra principală a programului:


Apăsând pe butonul Form2.ShowDialog() se deschide acest formular:


Fereastra se poate închide fie prin butonul OK, când după închidere apare această fereastră:


Fie prin butonul Anulare, butonul X din bara de titlu sau combinația de taste Alt + F4, când după închidere apare această fereastră:



Dacă programul se închide forțat (din Managerul de activități - Task Manager, de exemplu) ferestrele din ultimele 2 capturi de ecran de mai sus nu se deschid.

Codul sursă

Form1.cs

using System;
using System.Windows.Forms;

namespace cs_form_dialogresult
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            DialogResult dr = frm2.ShowDialog(this);

            if (dr == DialogResult.OK)
            {
                MessageBox.Show(this,
                    "Butonul OK a fost apasat.");
            }
            else if (dr == DialogResult.Cancel)
            {
                MessageBox.Show(this,
                    "Butonul X sau Anuleaza a fost apasat.");
            }
            else
            {
                // Caz neasteptat, practic imposibil in
                // implementarea noastra.
                throw new NotImplementedException();
            }

            frm2.Dispose();
        }
    }
}

Form2.cs

using System;
using System.Windows.Forms;

namespace cs_form_dialogresult
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void btnOK_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.OK;
        }

        private void btnAnuleaza_Click(object sender, EventArgs e)
        {
            // Functioneaza la fel ca la inchiderea
            // prin clic pe butonul X din bara de titlu:
            DialogResult = DialogResult.Cancel;
        }
    }
}

Niciun comentariu:

Trimiteți un comentariu