duminică, 13 martie 2016

C#18 Forme, Dialoguri modale și nemodale

Crearea formelor la run time

O formă este un tip de control care reprezintă o fereastră. Este folosită ca suport pentru alte controale.
Crearea prin program a formelor:
                         
                            Form f = new Form();
                            f.Show();

sau se poate defini o clasa derivata din clasa Form:

                            class FormaMea:Form
                            {
                                public FormaMea() //constructorul
                                {
                                }
                                 // alti membri ai clasei (campuri, proprietati,metode)
                            }

Dintr-o alta metod a aplicatiei se face instantierea:

                             FormaMea f=new FormaMea();
                             f.Show();

Aplicatie de tipul consola care crează și deschide o fereasta la run-time.

  • Creăm un proiect nou, de tipul Console Application, Empty Project. Punem un nume proiectului, de pilda DialogModal. Facem click dreapta in Solution Explorer pe numele proiectului si alegem Add, apoi New Item.
  • In dialogul Add New Item selectam iconul Code File, apoi in caseta Name introducem numele fisierului: de exemplu Modal.cs.
  • Fisierul Modal.cs se deschide in editorul de cod.
  • Adaugam proiectului  referinte catre spatiile de nume System, System.Windows, System.Windows.Form, in felul urmator:
  • Click dreapta pe References (in panoul  Solution Explorer) si alegem Add. Din dialogul care se deschide, selectam cele trei spatii de nume scrise mai sus cu bold.
Introducem codul de mai jos, compilam si rulam.

using System;
using System.Windows;
using System.Windows.Forms;
class Forma: Form
{

}
class Program
{
    public static void Main()
    {
        Forma f = new Forma(); // instantiere
        //textul din bara de titlu
        f.Text = "Dialog modal";
        //dialogul modal devine vizibil
        f.ShowDialog();
        //lanseaza aplicatia
        Application.Run();
    }
}


Dialogul modal și nemodal


Un dialog modal este o fereastră de dialog cu utilizatorul care blochează orice altă activitate în aplicație până când nu se închide ferestra cu close. De exemplu, dialogul Open File din MS Word.
O fereastră de dialog modal se afișeză cu metoda ShowDialog().

Dialogul nemodal este o fereastă de dialog care nu blochează restul aplicației. De exemplu, Toolbox-urile din Paint și Word. Un dialog nemodal se afișează cu metoda Show().

Aplicația ModalDialogExemplu

  • Construiește un dialog modal care se deschide la apăsarea unui buton al formei părinte
  • Datele introduse într-un control al dialogului sunt transferate unui control al formei părinte
  1. Creăm un proiect nou de tipul WindowsFormsApplication
  2. Plasăm pe formă cu mousul un ListBox și două butoane. Setăm proprietatea Text a celor două butoane pe valorile Adauga și respectiv Iesire.
  3. Adăugăm o nouă formă proiectului la design-time: în Solution Explorer  click dreapta pe numele proiectului, alegem Add, apoi Windows Form.
  4. În Solution Explorer dublu click pe numele Form2.
  5. Aducem din Toolbox pe Form2 un TextBox și un buton, inscriptionat cu Ok.
  6. În Solution explorer facem click pe numele Form2, alegem View Code si in clasa Form2 definim noii membri:
           //câmp care  reține textul introdus în TextBox1
           private string item;
           /*proprietate care  returneaza valoarea textului; reamintim ca o proprietate este un fel             de  metoda
           care permite tratatea campurilor private ca si cum ar fi publice, dar numai pentru doua
           genuri de operatii: set si get.
          */
           public string Item
           {
               get{return item;}
           }

Tratam evenimentul Click generat de apasarea butonului Ok: introducem codul de mai jos in metoda handler a evenimentului click al lui button1:

           item = textBox1.Trim();
           //inchidem forma Form2:
            Close();

         7. In Form1 introducem o referinta catre Form2:
                           
            private Form2 f; //aceasta declaratie se scrie in clasa Form1, din fisierul Form1.cs.

         8. Tratam evenimentul Click al butonului Adauga aflat pe Form1.
         9. Pentru iesirea din aplicatie tratam  evenimentul click al butonului Iesire:
                     Application.Exit();
       10. Compilam si rulam aplicatia.


Codul pentru Form1 este  urmatorul:

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

        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private Form2 f;

        private void button1_Click(object sender, EventArgs e)
        {
            //cream forma form2
            f = new Form2();
            //afisare dialog modal
            f.ShowDialog();
            if(f.Item!="") //daca exista text introdus
            {
                //adauga itemul in listBox1
                listBox1.Items.Add(f.Item);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}


Codul pentru obiectele din Form2:

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

        private void Form2_Load(object sender, EventArgs e)
        {

        }
        // camp care  retine textul introdus in textBox1
        private string item;
        //proprietate get item
        public string Item
        {
            get
            {
                return item;
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //salvam textul introdus in control
            item = textBox1.Text.Trim();
            //inchidem forma Form2
            Close();
        }
    }
}

De reținut:

  • Dialogurile modale se afișează cu metoda ShowDialog, iar cele  nemodale cu Show.
  • La închiderea cu Close un dialog nemodal se distruge (se distruge instanta clasei).
  • Un dialog modal nu este distrus la închiderea cu Close.  Câmpurile instanței rămân, iar forma poate fi reafișată. A se vedea accesul la câmpul f.Item după închiderea cu Close a formei Form2.
  • Codul care urmează lui ShowDialog nu se execută până când forma nu se închide. După închiderea  dialogului modal, putem referi în continuare clasa Form2 și membrii ei.
  • Întrebare: la o a doua apăsare a butonului Form1.Button1 se  creează o nouă instanță a formei Form2? Dacă da, ce se întâmplă cu cea veche? Cum mai poate fi accesată?

Niciun comentariu:

Trimiteți un comentariu