Sunteți pe pagina 1din 9

Programare orientată pe obiecte Curs 12

Formularele Windows

O aplicaţie Windows Forms este compusă din una sau mai multe ferestre, numite
formulare. Acestea pot fi ferestre de pe primul nivel, ferestre descendent sau casete de
dialog. Pentru utilizarea formularelor vom avea nevoie de spaţiul de
System.Windows.Forms.

Obiectele din acest spațiu de nume se utilizează pentru crearea interfeţei cu


utilizatorul. Interfața cu utilizatorul se poate crea direct din cod dar se poate realiza și prin
intermediul mediului de proiectare pus la dispoziţie de Visual Studio.

Cele mai importante clase din spaţiu de nume System.Windows.Forms sunt:

Nume Descriere
Application Pune la dispoziţie metode statice pentru gestionarea aplicaţiilor
(pornirea, oprirea, obţinerea de informaţii etc.).
BorderStyle O enumerare care specifică tipul de chenar.
Button Reprezintă un control Windows Button.
ButtonState O enumerare care specifică aspectul unui buton.
CheckBox Reprezintă un control Windows CheckBox.
Clipboard Permite scrierea şi citirea datelor din memoria clipboard a

1 lect. dr. Marius Apetrii


Programare orientată pe obiecte Curs 12

sistemului.
ColorDialog Afişează o casetă de dialog standard pentru alegerea culorilor.
ComboBox Reprezintă un control Windows ComboBox.
Cursor Reprezintă un cursor.
DataGrid Afişează date Microsoft ADO.NET.
DateTimePicker Reprezintă un control Windows pentru alegerea datei şi a orei.
Form Reprezintă o fereastră sau o casetă de dialog.
HScrollBar Reprezintă o bară de derulare orizontală.
ImageList Reprezintă o colecţie de imagini folosite de obicei pentru barele
de instrumente.
Label Reprezintă un control Windows Label.
ListBox Reprezintă un control Windows ListBox.
ListView Afişează o listă de articole.
Menu Reprezintă un meniu.
MessageBox Afişează o casetă de mesaje.
Panel Un control care poate conţine alte controale.
ProgressBar Reprezintă un control Windows PrograssBar.
RadioButton Reprezintă un control Windows RadioButton.
Splitter Asigură funcţionalitatea de divizare unei ferestre.
StatusBar Reprezintă un control Windows StatusBar.
TextBox Reprezintă un control Windows TextBox.
ToolBar Reprezintă un control Windows ToolBar.

Un formular este reprezentat de o clasă care moşteneşte clasa


System.Windows.Forms.Form. Această clasă are un număr mare de proprietăţi și metode,
cele mai importante fiind enumerate în continuare.

Proprietăți ale unui formular:

Nume Descriere
AcceptButton Obţine sau stabileşte o referinţă către butonul care corespunde apăsării
tastei Enter.
ActiveForm Obţine fereastra activă în momentul respectiv pentru aplicaţia curentă..
AutoScale Obţine sau stabileşte o valoare booleană care indică dacă formularul îşi
ajustează dimensiunea în funcţie de fontul folosit în formular, ajustând
proporţional şi controalele conţinute. Valoarea prestabilită este true.

2 lect. dr. Marius Apetrii


Programare orientată pe obiecte Curs 12

AutoScroll Obţine sau stabileşte o valoare booleană care indică dacă formularul
afişează bare de derulare atunci când controalele ies din zona vizibilă.
Valoarea prestabilită este true.
CancelButton Obţine sau stabileşte o referinţă către butonul care corespunde apăsării
tastei Esc.
ClientSize Obţine sau stabileşte dimensiunea zonei client a formularului. (Zona
client este acea porţiune din formular rămasă după excluderea barei de
titlu şi a chenarului.)
DesktopLocation Obţine sau stabileşte locul unde este afişat formularul în spaţiul de
lucru Windows.
FormBorderStyle Obţine sau stabileşte stilul de chenar al formularului. Valoarea
prestabilită este FormBorderStyle.Sizeable.
HelpButton Obţine sau stabileşte o valoare booleană care arată dacă formularul
afişează un buton Help în bara de titlu. Valoarea prestabilită este false.
Icon Obţine sau stabileşte pictograma asociată formularului.
MaximizeBox Obţine sau stabileşte o valoare booleană care indică dacă formularul
afişează o casetă Maximize în bara de titlu. Valoarea prestabilită este
true.
Menu Obţine sau stabileşte o referinţă către meniul afişat de formular.
MinimizeBox Obţine sau stabileşte o valoare booleană care indică dacă formularul
afişează o casetă Minimize în bara de titlu. Valoarea prestabilită este
true.
OwnedForms Conţine colecţia de formulare descendent deţinute de acest formular
(dacă există).
ShowInTaskBar Obţine sau stabileşte o valoare booleană care indică dacă formularul se
afişează sau nu în bara de taskuri Windows. Valoarea prestabilită este
true.
Size Obţine sau stabileşte dimensiunea ferestrei.
TopLevel Obţine sau stabileşte o valoare booleană care indică dacă formularul
este o fereastră de pe primul nivel sau nu. Valoarea prestabilită este
true.
TopMost Obţine sau stabileşte o valoare booleană care indică dacă formularul
este o fereastră de pe cel mai înalt nivel (fereastra este afişată
întotdeauna deasupra clorlalte ferestre, chiar dacă nu conţine cursorul
de intrare). Valoarea prestabilită este false.
WindowState Obţine sau stabileşte starea ferestrei, care determină modul de afişare a
formularului: minimizat, maximizat sau normal. Valoarea prestabilită
este FormWindowState.Normal.

3 lect. dr. Marius Apetrii


Programare orientată pe obiecte Curs 12

Metode ale unui formular:

Nume Descriere
Activate Activează fereastra, aducând-o în prim-planul colecţiei de
ferestre.
Close Închide formularul şi eleberează resursele folosite de acesta.
SetDesktopLocation Stabileşte poziţia formularului în spaţiul de lucru.
ShowDialog Afişează formularul ca o casetă de dialog modală.

Într-o aplicaţie putem avea mai multe formulare. Acestea pot fi independente sau se
pot afla într-o relaţie de tip părinte/descendent. Formularele de pe primul nivel (folosite de
obicei pentru fereastra principală) fie nu au un formular părinte, fie au ca părinte spaţiul de
lucru Windows.

Observaţie: Un formular de pe prima poziţie poate fi părinte pentru un formular tot de pe


prima poziţie (ex. Caseta de dialog Find and Replace din Word) dar este creată o relaţie de
tipul:

o Formularul descendent este minimizat, maximizat şi ascuns împreună cu


formularul părinte;
o Formularul descendent este închis atunci când este închis formularul părinte;
o Formularul descendent nu este afişat niciodată în spatele formularului părinte.

Exemplele discutate la curs:

Exemplul 1 (click aici pentru download)


Exemplul 2 (click aici pentru download)

Evenimente ale unui formular

Pentru prezentarea evenimentelor unui formular este necesară o scurtă prezentare a


delegărilor în C#.
Delegările sunt echivalentul pointerilor de funcţii. O delegare este o clasă care
permite apelul mai multor metode (funcţii) care au o anumită semnatură (un tip rezultat și o
listă de parametri). O metoda ocupă o locatie în memoria fizică și la invocarea metodei,
controlul se transferă la adresa punctului de intrare in metodă. Aceasta adresa poate fi
atribuita unei delegari și astfel metoda poate fi apelată prin intermediul delegării. Mai mult,
acceași delegare poate fi utilizată pentru a apela și alte metode, modificând pur și simplu
metoda referita.

4 lect. dr. Marius Apetrii


Programare orientată pe obiecte Curs 12

Declararea unei delegări se face utilizând cuvantul cheie delegate urmat de prototipul unei
funcţii
delegate tip_rez nume_delegare(lista paramatri);
unde tip_rez este tipul valorii întoarse de metodele pe care delegarea le va apela,
numele delegarii este specificat prin nume, iar parametrii necesari metodelor care vor fi
apelate prin intermediul delegarii sunt specificați prin lista_parametri.

Exemplu:
delegate double nume_delegare(double); //s-a definit o delegare pentru
funcţii care primesc un double şi întorc un double

Delegarile sunt importante deoarece:


 permit implementarea evenimentelor
 amana determinarea metodei invocate pana la momentul executiei (proprietate utilă
atunci când se dorește crearea unei arhitecturi care permite adăugarea
componentelor pe parcurs.

Delegările pot apela atât metode statice cât și metode ale obiectelor.

Crearea unui delegat asociat cu un membru nestatic al unei clase:

nume_delegare nume_delegat=new nume_delegare (membru.numeMetoda);

Crearea unui delegat asociat cu un membru static al unei clase:


nume_delegare nume_delegat=new nume_delegare(numeClasa.numeMetoda);

Pentru executarea unei funcţii asociate cu un delegat se poate face apelul ca în cazul
funcțiilor sau folosind metoda Invoke a delegatului.

nume_delegat(lista argumente);
sau
nume_delegat->Invoke(lista argumente);

Exemplu:

class A
{
private int nr;
public A(int nr)
{
this.nr = nr;
}
public static double metodaA(double x)
{//metoda statica
Console.WriteLine("A: am primit valoarea {0}.", x);
return x * x;
}

public double metoda_nestaticaA(double x)

5 lect. dr. Marius Apetrii


Programare orientată pe obiecte Curs 12

{//metoda nestatica
Console.WriteLine("A[{0}]: am primit valoarea {1}.", nr, x);
return nr * x;
}
}

class Program
{
delegate double delegare(double x);//definim delegarea

static void Main(string[] args)


{
A a = new A(3);
delegare deleg1 = new delegare(A.metodaA);//un delegat catre o metoda
statica
delegare deleg2 = new delegare(a.metoda_nestaticaA);//un delegat catre o
metoda nestatica

int i = (int)deleg1.Invoke(13);//apel cu Invoke


double j=deleg2(6);
Console.WriteLine(i + " - " + j);
}
}

În urma execuției obținem:


A: am primit valoarea 13.
A[3]: am primit valoarea 6.
169 - 18
Press any key to continue . . .

Delegările pot fi utilizate şi pentru grupuri de funcţii, astfel un delegat putând să


apeleze mai multe funcţii printr-un singur apel al metodei Invoke. Un asemenea delegat se
numeşte delegat pentru grupuri de funcţii (multicast delegate) şi este derivat din clasa
System.MulticastDelegate. Multicastingul reprezintă capacitatea de a crea un lanț de
metode care vor fi automat apelate la invocarea unei delegari. Un astfel de lant se crează
instanțiind mai întai o delegare, iar apoi utilizand operatorul += se adauga metode în lanț
sau utilizand operatorul -= se elimină metode din lanț. Deoarece valorile returnate la apelul
metodelor din lanț nu pot fi preluate, delegarile multicast se declară pentru metode ce
întorc un rezultat de tip void.

Exemplu:
delegare deleg3 = new delegare(A.metodaA);
deleg3 += new delegare(a.metoda_nestaticaA);
deleg3(5); //putem face apelul dar nu putem “capta” valorile întoarse de cele
două metode

Exemplu:
public delegate void MyDelegate(double r, out double a);
class Cerc
{
const float PI = 3.14159f;
public static void Aria(double r, out double a)
{

6 lect. dr. Marius Apetrii


Programare orientată pe obiecte Curs 12

a = PI * r * r;
}
public static void Lungime(double r, out double l)
{
l = 2 * PI * r;
}
}

class Program
{
static void Main(string[] args)
{
double raza = 3, arie, lungime;
MyDelegate deleg = new MyDelegate(Cerc.Aria);
deleg(raza, out arie);
Console.WriteLine("Aria= {0:#.##}", arie);
deleg -= new MyDelegate(Cerc.Aria);
deleg += new MyDelegate(Cerc.Lungime);
deleg(raza, out lungime);
Console.WriteLine("Lungimea frontierei={0:#.##}",lungime);
}
}

În urma execuției obținem:


Aria= 28,27
Lungimea frontierei=18,85
Press any key to continue . . .

Delegările prezentate anterior vor fi utilizate pentru metodele asociate


evenimentelor. O procedura de tratare a unui eveniment este înregistrată în sursă prin
folosirea operatorului +=, pentru a lega procedura de tratare. Dacă ulterior se doreşte
anularea procedurii de tratare a evenimentului, se poate folosi operatorul -= pentru a
desface conexiunea procedurii de tratare.

Exemplu de tratare a evenimentul Click pentru un obiect Form:


this.Click += new System.EventHandler(this, formular_A_Click);
(pentru “abonarea” la eveniment)

private System.Void formular_A_Click(System.Object sender,


System.EventArgs e)
{
Console.WriteLine("Formular A.Click");
}
(pentru descrierea procedurii de tratare)

În tabelul de mai jos sunt prezentate principalele evenimente ale obiectului Form,
precum şi descrierea acestora.

Nume Descriere

7 lect. dr. Marius Apetrii


Programare orientată pe obiecte Curs 12

Activated Apare când formularul este activat.


Primeşte un argument de tip EventArgs.

Click Apare când se executa click. (Moştenit de la clasa Control.)


Primeşte un argument de tip EventArgs.

Deactivate Apare când formularul pierde focusul.


Primeşte un argument de tip EventArgs.

DoubleClick Apare când s-a făcut dublu click.


Primeşte un argument de tip EventArgs. (Moştenit de la Control.)

DragDrop Apare când operaţia drag-and-drop este completă.


Primeşte un argument de tip DragEventArgs. (Moştenit de la Control.)

FormClosed Apare când formularul este închis.


Primeşte un argument de tip FormClosedEventArgs.

FormClosing Apare când formularul se inchide.


Primeşte un argument de tip FormClosingEventArgs, care are
proprietatea Cancel cu valori de tip boolean.

KeyDown Apare cand se apasă o tastă, dacă formularul are focusul.


Primeşte un argument de tip KeyEventArgs. (Moştenit de la Control.)

KeyPress Apare cand este apăsată o tastă, dacă formularul are focusul.
Primeşte un argument de tip KeyPressEventArgs. (Moştenit de la
Control.)

KeyUp Apare cand se eliberează o tastă, dacă formularul are focusul.


Primeşte un argument de tip KeyEventArgs. (Moştenit de la Control.)

Load Apare când formularul este încărcat.


Primeşte un argument de tip EventArgs.

MouseDown Apare când mouse-ul este deasupra formularului şi este apăsat un buton
al acestuia.
Primeşte un argument de tip MouseEventArgs. (Moştenit de la
Control.)

MouseEnter Apare când intră mouse-ul.


Primeşte un argument de tip EventArgs. (Moştenit de la Control.)

MouseHover Apare când mouse-ul este deasupra formularului.


Primeşte un argument de tip EventArgs. (Moştenit de la Control.)

MouseLeave Apare când iese mouse-ul.


Primeşte un argument de tip EventArgs. (Moştenit de la Control.)

8 lect. dr. Marius Apetrii


Programare orientată pe obiecte Curs 12

MouseMove Apare când este mişcat mouse-ul deasupra formularului.


Primeşte un argument de tip MouseEventArgs. (Moştenit de la
Control.)

MouseUp Apare când mouse-ul este deasupra formularului şi este eliberat un


buton al acestuia.
Primeşte un argument de tip MouseEventArgs. (Moştenit de la
Control.)

Move Apare când fereastra este mutata.


Primeşte un argument de tip EventArgs. (Moştenit de la Control.)

Paint Apare când fereastra este redesenata.


Primeşte un argument de tip PaintEventArgs. (Moştenit de la Control.)

Resize Apare când fereastra este redimensionata.


Primeşte un argument de tip EventArgs. (Moştenit de la Control.)

Exemplul discutat la curs:

Exemplul (click aici pentru download)

9 lect. dr. Marius Apetrii

S-ar putea să vă placă și