Sunteți pe pagina 1din 7

Octombrie, 2013

Proiectarea aplicaiilor Windows n C#


Aplicaiile Windows sunt aplicaii conduse (orientate) de evenimente.
Obiectul principal al unei aplicaii Windows este formularul.
Spaiul System.Windows.Forms ne ofer clase specializate pentru crearea
formularelor.
La crearea unei aplicaii de tip Windows Forms Application sistemul
genereaz un formular (fereastra principal a aplicaiei) ce va fi instaniat(automat) n
programul principal (metoda Main) printr-o secven de cod ca mai jos:
static void Main()
{ ...
Application.Run(new Form1());
}
Clasa Application este responsabil cu administrarea unei aplicaii Windows,
punnd la dispoziie proprieti pentru a obine informaii despre aplicaie, metode de
lucru cu aplicaia i altele. Toate metodele i proprietile clasei Application sunt
statice. Metoda Run invocat mai sus creeaz un formular implicit, aplicaia
rspunznd la mesajele utilizatorului pn cnd formularul va fi nchis.
Putem aduga proiectului noi formulare utiliznd
ProjectsAdd Windows FormWindows FormsTemplates Windows Form.
In caseta Name atribuim o denumire noului formular.
Dup adugarea unui nou formular, trebuie sa scriem si codul ce realizeaz
instantierea i activarea lui.
Un formular poate fi activat cu metodele Show() sau ShowDialog(). Metoda
ShowDialog() permite ca revenirea n fereastra din care a fost activat noul formular s
se fac numai dup ce noul formular a fost inchis (spunem c formularul nou este
deschis modal).
Presupunnd c am adugat proiectului un formular nou cu denumirea
formularNou, pentru instaniere folosim o secven de forma
formularNou f=new formularNou();
f. ShowDialog()
Formularele (obiecte derivate din clasa System.Windows.Forms.Form) sunt
obiecte de tip container(collection). Intr-un formular putem include controale adic
obiecte(instane) de clase derivate din clasa System.Windows.Forms.Control care
asigur funcionalitatea de baz a controalelor.
Proiectarea unui formular are la baz un cod complex, generat automat pe
msur ce adugm componentele i comportamentul acestuia.

Controale

Un control se caracterizeaz prin proprietile sale i prin evenimentele care


pot fi generate de el. Atunci cnd utilizatorul acioneaz asupra unui control(apsarea
unui buton, scrierea unui caracter, micarea mouse-ului etc.) se genereaz un
eveniment(event). Aplicaia trebuie s sesizeze faptul c s-a acionat asupra
controlului s identifice tipul aciunii i s execute o secven de cod care s rezolve
aciunea. Pentru aceasta, codul va trebui completat ntr-o metod de tip handler
(administrator de evenimente).
Un handler este o funcie special care se lanseaz n execuie n mod automat
la producerea evenimentului specific.
Metodele de tip handler au o sintax standardizat:
private void <denumire handler>_<tip eveniment>(object sender, System.EventArgs e)
{ //codul administratorului de eveniment }
Un handler primete ca parametri obiectul care produce acel
eveniment(sender) i un obiect de tip EventArgs ce ofer detalii despre eveniment.

Marea majoritate a controalelor sunt obiecte de clase derivate din clasa


System.Windows.Forms.Control. Aceast clas furnizeaz funcionalitatea de baz
pentru controale, de aceea multe din proprietile i evenimentele controalelor, chiar
dac acestea sunt structural diferite, vor fi identice.

Proprieti ale controalelor


n cele ce urmeaz, vom prezenta un set de astfel de proprieti, furnizate de clasa
Control, deci comune tuturor controalelor. O descriere detaliat a acestor proprieti
poate fi gsit n MSDN.
Anchor prin aceast proprietate se poate specifica comportamenul controlului la
redimensionarea ferestrei ce-l conine. Ancorarea lui de una din marginile ferestrei
va face ca poziia acestuia fa de marginea respectiv s nu se schimbe.
Ancorarea lui de toate marginile ferestrei va avea ca efect redimensionarea
controlului odat cu redimensionarea ferestrei.
BackColor stabilete culoarea de fond a controlului.
Bottom stabilete distana de la marginea de sus a ferestrei la marginea de jos a
controlului.
Dock ataeaz controlul de una din marginile ferestrei.
Enabled activeaz controlul, adic permite acestuia s recepioneze evenimente
de la utilizator. Dac aceast proprietate este FALSE, controlul este inactiv.
ForeColor definete culoarea textului.
Height definete nlimea controlului.

Left definete marginea stng a controlului, relativ la marginea stng a


ferestrei.
Name identificatorul controlului. Poate fi utilizat n cod pentru a individualiza i
accesa controlul.
Parent printele controlului.
Right - definete marginea dreapt a controlului, relativ la marginea stng a
ferestrei.
TabIndex numrul asociat controlului n ordinea de tab. Ordinea de tab
stabilete ordinea in care controalele primesc input focusul (se selecteaz) la
apsarea tastei TAB.
TabStop Stabilete dac controlul primete input focusul la apsarea tastei
TAB. Dac controlul nu are aceast proprietate, la apsarea tastei TAB va fi srit.
Tag este o proprietate care n general nu este utilizat de control. Poate fi doar un
ir de caractere, care este stocat n interiorul controlului.
Top - stabilete distana de la marginea de sus a ferestrei la marginea de sus a
controlului.
Visible dac aceast proprietate este TRUE, controlul este vizibil. n caz
contrar, dei exist n formular, el nu poate fi vazut.
Width - stabilete limea controlului.

Evenimente generate de controale


Atunci cnd utilizatorul acioneaz asupra unui control (apas un buton, selecteaz o
opiune radio, scrie ntr-o list, etc) aplicaia trebuie s fie capabil s sesizeze faptul
ca s-a acionat asupra controlului respectiv, s identifice tipul aciunii i s execute o
secven de cod care s rezolve problema n concordan cu tipul aciunii. Pentru a
sesiza aciunea asupra lor, controalele genereaz evenimente. Clasa Control
implementeaz un set de evenimente comune tuturor controalelor, iar acestea, la
rndul lor, vor genera i un set de evenimente specifice. Cele mai uzuale evenimente
sunt prezentate mai jos, lista complet a acestora fiind disponibil n MSDN.
Click este generat cnd se apas click cu mouse-ul asupra unui control. Poate fi
uneori generat i de apsarea tastei Enter.
DoubleClick este generat cnd se apas dublu click asupra unui control. Dac
controlul este buton, acest eveniment nu va putea fi generat, pentru ca la prima
apsare se genereaz automat Click.
DragDrop este generat cnd se finalizeaz (este eliberat butonul mouse-lui) o
operaie drag-and-drop n care este implicat controlul.
3

DragEnter este generat atunci cnd obiectul implicat ntr-o operaie drag-anddrop ajunge n interiorul controlului.
DragLeave - este generat atunci cnd obiectul implicat ntr-o operaie drag-anddrop prsete suprafaa controlului.
DragOver este generat cnd un obiect implicat ntr-o operaie drag-and-drop
ajunge deasupra controlului.
KeyDown este generat cnd o tast devine apsat n timp ce controlul deine
input focusul. Se genereaz ntotdeauna nainte de KeyPress i KeyUp.
KeyPress - este generat cnd o tast devine apsat n timp ce controlul deine
input focusul. Se genereaz ntotdeauna dup KeyDown i nainte de KeyUp.
Spre deosebire de KeyDown care furnizeaz codul de scanare al tastei apsate,
KeyPress furnizeaz codul ascii al tastei.
KeyUp - este generat cnd o tast este eliberat n timp ce controlul deine input
focusul. Se genereaz ntotdeauna dup KeyDown i KeyPress.
GotFocus este generat cnd controlul primete input focusul.
LostFocus este generat cnd controlul pierde input focusul.
MouseDown este generat cnd prompterul mouse-lui este deasupra controlului
i se apas o tast a mouse-lui.
MouseMove este generat continuu atta timp ct prompterul mouse-lui
traverseaz controlul.
MouseUp - ste generat cnd prompterul mouse-lui este deasupra controlului i se
elibereaz o tast a mouse-lui.
Paint se genereaz la desenarea controlului.
Validating - este generat cnd un control este n curs de a primi focusul.
Validated este generat cnd un control este n curs de a primi focusul. Se
genereaz dup ce evenimentul Validating se termin i indic faptul c validarea
controlului este complet.
Evenimentele Validating si Validated sunt active doar daca proprietatea
CausesValidation este setata cu true
Aplicatie

using
using
using
using
using
using
using
using

System;
System.Collections.Generic;
System.ComponentModel;
System.Data;
System.Drawing;
System.Linq;
System.Text;
System.Windows.Forms;

namespace Controale
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
cbStareCivila.Items.Add("Necasatorit");
cbStareCivila.Items.AddRange(new string[3]{"Casatorit","divortat","vaduv"});
cbStareCivila.SelectedIndex = 0;

progresMedie.Minimum = 0;
progresMedie.Maximum = 100;
foreach (object t in this.Controls)
if (t.GetType() == typeof(TextBox))
((TextBox)t).BackColor = Color.Aquamarine;
}
private bool NotaValida(Object sender)
{
TextBox t = (TextBox)sender;
try
{
decimal n = decimal.Parse(t.Text);
if (n < 5 || n > 10)
throw new Exception("Nota Eronata");
return true;
}
catch (Exception ex)
{
MessageBox.Show("Eroare:" + ex.Message);
return false;
}
}
private void button1_Click(object sender, EventArgs e)
{
decimal medie;
medie = (decimal.Parse(tbNotaEx.Text) + decimal.Parse(tbNotaL.Text)) /2;
tbNotaF.Text = medie.ToString();
progresMedie.Value = (int)(progresMedie.Maximum * medie / 10);
}
private void tbNotaEx_Validated(object sender, EventArgs e)
{
if (!NotaValida((TextBox)sender))
((TextBox)sender).Focus();
}
private void tbNotaL_Validated(object sender, EventArgs e)
{
if (!NotaValida((TextBox)sender))
((TextBox)sender).Focus();
}
private void button2_Click(object sender, EventArgs e)
{
lbComentariu.Text = "student ";
lbComentariu.Text += tbNumeStd.Text + "\n";
lbComentariu.Text += "Nota Examen: " + tbNotaEx.Text + "\n";
lbComentariu.Text += "Nota Laborator: " + tbNotaL.Text + "\n";
if (rbFeminin.Checked) lbComentariu.Text += "Feminin" + "\n";
else if (rbMasculin.Checked) lbComentariu.Text += "Masculin" +"\n";
else lbComentariu.Text += "Nespecificat" + "\n";
if (checkEN.Checked) lbComentariu.Text += "Engleza" + "\n";
if (checkFR.Checked) lbComentariu.Text += "Franceza" + "\n";
}
private void button3_Click(object sender, EventArgs e)
{
tbNumeStd.Text = "";
tbNotaL.Text = "";

tbNotaEx.Text = "";
tbNotaF.Text = "";
lbComentariu.Text = "";
checkFR.Checked = false;
checkEN.Checked = false;
rbFeminin.Checked = false;
rbMasculin.Checked = false;

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