Sunteți pe pagina 1din 23

II.4.

Construirea interfeei utilizator


II.4.1. Ferestre
Spaiul Forms ne oferclase specializate pentru: creare de ferestre sau formulare (System.Windows.Forms.Form), elemente specifice (controale) cum ar fi butoane (System.Windows.Forms.Button), casete de text (System.Windows.Forms.TextBox) etc. Proiectarea unei ferestre are la bazun cod complex, generat automat pe msurce noi desemnm componentele i comportamentul acesteia. n fapt, acest cod realizeaz: derivarea unei clase proprii din System.Windows.Forms.Form, clascare este nzestratcu o colecie de controale (iniial vid). Constructorul ferestrei realizeazinstanieri ale claselor Button, MenuStrip, Timer etc. (orice plasm noi n fereastr) i adaugreferinele acestor obiecte la colecia de controale ale ferestrei.
144

Dacmodelul de fereastrreprezintferestra principala aplicaiei, atunci ea este instaniatautomat n programul principal (metoda Main). Dacnu, trebuie sscriem noi codul care realizeazinstanierea. Clasele derivate din Form motenesc o serie de proprieti care determinatributele vizuale ale ferestrei (stilul marginilor, culoare de fundal, etc.), metode care implementeazanumite comportamente (Show, Hide, Focus etc.) i o serie de metode specifice (handlere) de tratare a evenimentelor (Load, Click etc.). O fereastrpoate fi activatcu form.Show() sau cu form.ShowDialog(), metoda a doua permind ca revenirea n fereastra din care a fost activat noul formular sse facnumai dupce noul formular a fost nchis (spunem cformularul nou este deschis modal). Un propietar este o fereastrcare contribuie la comportarea formularului deinut. Activarea propietarului unui formular deschis modal va determina activarea formularului deschis modal. Cnd un nou formular este activat folosind form.Show() nu va avea nici un deintor, acesta stabilinduse direct : Formularul deschis modal va avea un proprietar setat pe null. Deintorul se poate stabili setnd proprietarul nainte sapelm Form.ShowDialog() sau apelnd From.ShowDialog() cu proprietarul ca argument. Vizibilitatea unui formular poate fi setatfolosind metodele Hide sau Show. Pentru a ascunde un formular putem folosi :

this.Hide(); // setarea propietatii Visible indirect sau this.Visible = false; // setarea propietatii Visible direct F_nou form = new F_nou(); form.ShowDialog(this); public Form Owner { get; set; } F_nou form=new F_nou(); form.Owner = this; form.Show();
145

Printre cele mai uzuale proprieti ale form-urilor, reamintim: StartPosition determinpoziia ferestrei atunci cnd aceasta apare prima dat. Poziia poate fi setatManual, sau poate fi centratpe desktop (CenterScreen), stabilitde Windows, formularul avnd dimensiunile i locaia stabilite de programator (WindowsDefaultLocation) sau Windows-ul va stabili dimensiunea iniiali locaia pentru formular (WindowsDefaultBounds) sau, centrat pe formularul care l-a afiat (CenterParent) atunci cnd formularul va fi afiat modal. Location (X,Y) reprezintcoordonatele colului din stnga sus al formularului relativ la colul stnga sus al containerului. (Aceastpropietate e ignoratdacStartPosition = Manual). Micarea formularului ( i implicit schimbarea locaiei) poate fi tratatn evenimentele Move i LocationChanged . Locaia formularului poate fi stabilitrelativ la desktop astfel: Size (Width i Height) reprezintdimensiunea ferestrei. Cnd se schimbpropietile Width i Height ale unui formular, acesta se va redimensiona automat, aceastredimensionare fiind tratatn evenimentele Resize sau in SizeChanged. Chiar dacpropietatea Size a formularului indicdimensiunea ferestrei, formularul nu este n totalitate responsabil pentru desenarea ntregului coninut al su. Partea care este desenatde formular mai este denumit i Client Area. Marginile, titlul i scrollbar-ul sunt desenate de Windows. MaxinumSize i MinimumSize sunt utilizate pentru a restriciona dimensiunile unui formular. ControlBox precizeazdacfereastra conine sau nu un icon, butonul de nchidere al ferestrei i meniul System (Restore,Move,Size,Maximize,Minimize,Close). HelpButton-precizeazdacbutonul va aprea sau nu lngbutonul de nchidere al formularului (doar dacMaximizeBox=false, MinimizeBox=false). Dacutilizatorul apasacest buton i apoi apasoriunde pe formular va aprea evenimentul HelpRequested (F1). Icon reprezintun obiect de tip *.ico folosit ca icon pentru formular. MaximizeBox i MinimizeBox precizeazdacfereastra are sau nu butonul Maximize i respectiv Minimize

Opacity indicprocentul de opacitate ShowInTaskbar precizeazdacfereastra apare in TaskBar atunci cnd formularul este minimizat. SizeGripStyle specifictipul pentru Size Grip (Auto, Show, Hide). Size grip (n colul din dreapta jos) indicfaptul caceastfereastrpoate fi redimensionat. TopMost precizeazdacfereastra este afisatn faa tuturor celorlalte ferestre. TransparencyKey identifico culoare care va deveni transparentpe form. Definirea unei funcii de tratare a unui eveniment asociat controlului se realizeazprin selectarea grupului Events din ferestra Properties a controlului respectiv i alegerea evenimentului dorit. Dacnu scriem nici un nume pentru funcia de tratare, ci efectum dublu clic n csua respectiv, se genereazautomat un nume pentru aceastfuncie, innd cont de numele controlului i de numele evenimentului (de exemplu button1_Click). Dacn Designer efectum dublu clic pe un control, se va genera automat o funcie de tratare pentru evenimentul implicit asociat controlului (pentru un buton evenimentul implicit este Clic, pentru TextBox este TextChanged, pentru un formular Load etc.). Printre evenimentele cele mai des utilizate, se numr: Load apare cnd formularul este pentru prima data ncrcat n memorie. FormClosed apare cnd formularul este nchis. FormClosing apare cnd formularul se va inchide ca rezultat al aciunii utilizatorului asupra butonului Close (Dacse seteazCancelEventArgs.Cancel =True atunci se va opri nchiderea formularului). Activated apare pentru formularul activ. Deactivate apare atunci cnd utilizatorul va da clic pe alt formular al aplicatiei.

II.4.2. Controale
Unitatea de baza unei interfee Windows o reprezintun control. Acesta poate fi gzduit de un container ce poate fi un formular sau un alt control. Un control este o instana unei clase derivate din System.Windows.Forms i este reponsabil cu desenarea unei pri din container. Visual Studio .NET vine cu o serie de controale standard, disponibile n Toolbox. Aceste controale pot fi grupate astfel:
147

Controale form. Controlul form este un container. Scopul su este de a gzdui alte controale.

Folosind proprietile, metodele i evenimentele unui formular, putem personaliza programul nostru. n tabelul de mai jos vei gsi o listcu controalele cel mai des folosite i cu descrierea lor. Exemple de folosire a acestor controale vor urma dupexplicarea proprietilor comune al controalelor i formularelor. Funcia controlului Numele controlului Descriere buton Button Sunt folosite pentru a executa o secvende instruciuni n momentul activrii lor de ctre utilizator calendar MonthCalendar Afieazimplicit un mic calendar al lunii curente. Acesta poate fi derulat i nainte i napoi la celelalte luni calendaristice. casetde validare CheckBox Oferutilizatorului opiunile : da/nu sau include/exclude etichetLabel Sunt folosite pentru afiarea etichetelor de text, i a pentru a eticheta controalele. casetcu list ListBox Afieazo listde articole din care utilizatorul poate alege. imagine PictureBox Este folosit pentru adugarea imaginilor sau a altor resurse de tip bitmap. pointer Pointer Este utilizat pentru selectarea, mutarea sau redimensionarea unui control. buton radio RadioButton Este folosit pentru ca utilizatorul sselecteze un singur element dint-un grup de selecii. casetde text TextBox Este utilizat pentru afiarea textului generat de o aplicaie sau pentru a primi datele introduse de la tastaturde ctre utilizator.

II.5. Aplicaii
II.5.1. Numere pare
Acest exemplu afieaznumerele pare din intervalul [0,n) unde n este o variabilglobala

crei valoare este introdusde la tastatur. Se deschide o aplicaie Windows Forms pe care o vei denumi Numere pare. Din fereastra Properties modificai numele formularului. Stabilii dimensiunea formularului i culoarea de fond alegnd una dintre cele predefinite din opiunea BackColor. Cu ajutorul metodei Drag and drop plasai pe formular un buton pe care vei introduce textul START, doucontroale TextBox, doucontroale label pe care vei introduce textele din exemplul de mai jos
148

Executai dublu clic pe butonul START i editai codul sursconform exemplului de mai jos: n fereastra Solution Explorer executai dublu clic pe Form1.Designer.cs pentru a declara variabilele globale n i i, n zona de declaraii a funciei InitializeComponent(). n acest moment aplicaia este gata. Din meniul File alegei opiunea Save All i rulai aplicaia.
private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.Button button1; int i=0,n; private void button1_Click(object sender, EventArgs e) { n = Convert.ToInt32(textBox1.Text); for (;i<n;i=i+2) { textBox2.Text = textBox2.Text + " " + Convert.ToString(i); } }
149

II.5.2. Proprieti comune ale controalelor i formularelor:


Proprietatea Text Aceastproprietate poate fi setatn timpul proiectrii din fereastra Properties, sau programatic, introducnd o declaraie n codul programului. Proprietile ForeColor i BackColor. Prima proprietate enunatseteazculoare textului din formular, iar cea de a doua seteazculoarea formularului. Toate acestea le putei modifica duppreferine din fereastra Properties. Proprietatea BorderStyle. Controleazstilul bordurii unui formular. ncercai svedei cum se modificsetnd proprietatea la Fixed3D (tot din fereastra Properties). Proprietatea FormatString vpermite ssetai un format comun de afiare pentru toate obiectele din cadrul unei ListBox. Aceasta se gsete disponibiln panoul Properties.

Proprietatea Multiline schimbsetarea implicita controlului TextBox de la o singurlinie, la mai multe linii. Pentru a realiza acest lucru tragei un TextBox ntr-un formular i modificai valoarea proprietii Multiline din panoul Properties de la False la true. Proprietatea AutoCheck cnd are valoarea true, un buton radio i va schimba starea automat la executarea unui clic. Proprietatea AutoSize folositla controalele Label i Picture, decide dacun control este redimensionat automat, pentru a-i cuprinde ntreg coninutul. Proprietatea Enabled determindacun control este sau nu activat ntr-un formular. Proprietatea Font determinfontul folosit ntr-un formular sau control. Proprietatea ImageAlign specificalinierea unei imagini aezate pe suprafaa controlului. Proprietatea TabIndex seteazsau returneazpoziia controlului n cadrul aranjrii taburilor. Proprietatea Visible seteazvizibilitatea controlului. Proprietatea Width and Height permite setarea nlimii i a limii controlului.

II.5.3. Metode i evenimente


Un eveniment este un mesaj trimis de un obiect atunci cnd are loc o anumitaciune. Aceastactiune poate fi: interaciunea cu utilizatorul (mouse click) sau interaciunea cu alte entiti de program. Un eveniment (event) poate fi apsarea unui buton, o selecie de meniu, trecerea unui anumit interval de timp, pe scurt, orice ce se intampln sistem i trebuie sprimeascun raspuns din partea programului. Evenimentele sunt proprieti ale clasei care le public. Cuvantul-cheie event contoleazcum sunt accesate aceste proprieti.

Metodele Show() i Close(). Evenimentul Click


Cnd dezvoltm programe pentru Windows, uneori trebuie safim ferestre adiionale. De asemenea trebuie sle facem sdisparde pe ecran. Pentru a reui acest lucru folosim metodele Show() i Close() ale controlului. Cel mai important eveniment pentru Button este Clic (desemnnd aciunea clic stnga pe buton). Exemplul 5: Caset de mesaj Pentru a crea o casetmesaj, apelm metoda MessageBox.Show();.ntr-o nouaplicaie Windows Forms, tragei un control de tip Button n formular, modificai textul butonului cum dorii sau ca n imaginea alturatva apare un mesaj, executai dublu clic pe buton i adugai n administratorul evenimentului Clic linia de program: MessageBox.Show("ti-am spus");. Apoi rulai aplicaia.

Exemplul 6: Este un exemplu de utilizare a controalelor de selecie CheckBox i RadioButton. Propietatea Checked indicdacam selectat controlul. Dacproprietatea ThreeState este setat, atunci se schimbfuncionalitatea acestor controale, n sensul cacestea vor permite setarea unei alte stri. n acest caz, trebuie verificatpropietatea CheckState(Checked, Unchecked, Indeterminate) pentru a vedea starea controlului CheckBox. Soluia unei probleme cu mai multe variante de rspuns este memoratcu ajutorul unor checkbox-uri cu proprietatea ThreeState. Apsarea butonului Verific determinafiarea unei etichete i a butoanelor radio DA i NU. Rspunsul este afiat ntr-un MessageBox.
154

Dupadugarea controalelor pe formular i setarea proprietilor Text i ThreeState n cazul checkbox-urilor stabilim evenimentele clic pentru butonul Verifica i pentru butonul radio cu eticheta DA:

Metodele ShowDialog() i Clear(). Evenimentul MouseEnter.


Exemplu: Casete de dialog
private System.Windows.Forms.Label label1; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.Button button1; private System.Windows.Forms.Timer timer1; int m; private void timer1_Tick(object sender, EventArgs e) { if (m <= Convert.ToInt32(textBox1.Text)) { int x = 300, y = 300, l = 150; patrat(m, x, y, l); m = m + 1; } }
157

Creai o nouaplicaie Windows Forms, apoi tragei un buton n formular i setai proprietatea Text a butonului la : savem un dialog, iar apoi executai dublu clic pe buton i modificai numele metodei din button1_click n button1_MouseEnter apoi folosii urmtorul cod pentru administratorul evenimentului MouseEnter. Intrai n codul surspentru Form1.Designer.cs i modificai linia de program: astfel: Acest eveniment al controlului Button vpermite ca la o simplplimbare pe buton fra executa clic pe el, sse execute codul sursal metodei.

Creai un alt formular la acest proiect (alegei Add Windows Forms din meniul Project), apoi n ordine: setai proprietatea ControlBox la valoarea false, setai proprietatea Text la casetde dialog, tragei n formular un control de tip Label i setai proprietatea Text la scrie text, adugai un control TextBox n formular, adugai doucontroale de tip Button, setai proprietatea Text a butonului din stnga la OK iar al celui din dreapta la Cancel, setai proprietatea DialogResult a butonului din stanga la OK iar al celui din dreapta la Cancel, executai clic pe formularul casetei de dialog i setai proprietatea AcceptButton la button1 iar proprietatea CancelButton la button2. Acum executai dublu clic pe butonul OK i folosii urmtorul cod pentru administratorul evenimentului Clic: Executai dublu clic pe butonul Cancel i folosii urmtorul cod pentru administratorul evenimentului Clic:
private void button2_Click(object sender, EventArgs e) {Form2 v = new Form2(); v.ShowDialog(); if (v.DialogResult != DialogResult.OK){ this.textBox1.Clear(); }} private void button1_Click(object sender, EventArgs e) {textBoxText = textBox1.Text;this.Close();} private void button1_MouseEnter(object sender, EventArgs e) { Form2 w = new Form2(); w.ShowDialog(); } this.button1.Click += new System.EventHandler(this.button1_Click); this.button1.MouseEnter += new System.EventHandler(this.button1_MouseEnter);
158

La nceputul clasei Form2 adugai declaraia: public string textBoxText; iar la sfritul clasei Form2 adugai proprietatea: Acum putei rula acest program.

Metoda Start(). Evenimentul MouseLeave. Exemplul 9: Schimb culoarea


n acest exemplu este prezentatmodalitatea de schimbare aleatoare a culorii unei etichete. Se deschide o aplicaie Windows Forms pe care o vei denumi Schimbculoarea. Din fereastra Properties redenumii formularul. Stabilii dimensiunea formularului i culoarea de fond alegnd una dintre cele predefinite din opiunea BackColor. Cu ajutorul metodei Drag and drop plasai pe formular: un control de tip Button pe care vei introduce textul START, un control de tip Button pe care vei introduce textul STOP, un control de tip Label pe care vei introduce textul Schimbculoarea, un control de tip Timer.
public string TextBoxText

{get{ return(textBoxText);}
159

Executai dublu clic pe butonul START i editai administratorul evenimentului conform exemplului de mai jos: Intrai n codul surspentru Form1.Designer.cs i modificai linia de program: astfel: Evenimentul MouseLeave va permite executarea codului sursa metodei n momentul n care vei plimba mouse-ul pe deasupra imaginii butonului i nu la executarea clic-ului. Executai dublu clic pe butonul STOP i inserai linia de cod timer1.Stop(); Declarai urmtoarea variabilca fiind variabillocalpentru clasa Form1 Executai dublu clic pe controlul Timer i inserai linia de cod care va permite schimbarea aleatoare a culorilor pentru controlul Label conform exemplului de mai jos: n acest moment aplicaia este gata. Din meniul File alegei opiunea Save All i rulai aplicaia.
private void timer1_Tick(object sender, EventArgs e) {label1.BackColor = Color.FromArgb(r.Next(255), r.Next(255), r.Next(255));} private void button1_MouseLeave(object sender, EventArgs e) {timer1.Start();} this.button1.Click += new System.EventHandler(this.button1_Click); this.button1.MouseLeave += new System.EventHandler(this.button1_MouseLeave); Random r = new Random(200);
160

Exemplul 10: Trei culori Acest exemplu afieazun grup alctuit din 3 butoane, etichetate A,B respectiv C avnd iniial culoarea roie. Apsarea unui buton determinschimbarea culorii acestuia n galben. La o nouapsare butonul revine la culoare iniial. Acionarea butonului Starea butoanelor determin afiarea ntr-o casettext a etichetelor butoanelor galbene. Caseta text devine vizibilatunci cnd apsm prima oaracest buton. Culoarea butonului mare (verde/portocaliu) se schimbatunci cnd mouse-ul este poziionat pe buton. Dupadugarea butoanelor i a casetei text pe formular, stabilim evenimentele care determinschimbarea culoriilor i completarea casetei text.
private void button1_Click(object sender, System.EventArgs e) { if (button1.BackColor== Color.IndianRed) button1.BackColor=Color.Yellow; else button1.BackColor= Color.IndianRed;} private void button4_MouseEnter(object sender, System.EventArgs e) {button4.BackColor=Color.YellowGreen;button4.Text="Butoane apasate";} private void button4_MouseLeave(object sender, System.EventArgs e)

{textBox1.Visible=false;button4.Text="Starea butoanelor"; button4.BackColor=Color.Orange;} private void button4_Click(object sender, System.EventArgs e) {textBox1.Visible=true;textBox1.Text=""; if( button1.BackColor==Color.Yellow)textBox1.Text=textBox1.Text+'A'; if( button2.BackColor==Color.Yellow)textBox1.Text=textBox1.Text+'B'; if( button3.BackColor==Color.Yellow)textBox1.Text=textBox1.Text+'C'; }
161

Metoda Dispose()
Exemplu:
private System.Windows.Forms.Button button1; private System.Windows.Forms.Timer timer1; int i = 0, cx = 300, cy = 300; private void button1_Click(object sender, EventArgs e) {graf = this.CreateGraphics(); timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { double u = 2 * i * Math.PI / 100; v[0].X = cx / 2 + cx / 2 * (float)Math.Cos(u); v[0].Y = 5 * cy / 8 + cy / 16 * (float)Math.Sin(u); v[1] = new PointF(cx / 2, -cy);v[2] = new PointF(cx / 2, 2 * cy); u += Math.PI / 4;v[3].X = cx / 2 + cx / 4 * (float)Math.Cos(u); v[3].Y = cy / 2 + cy / 16 * (float)Math.Sin(u); Pen p = new Pen(Color.FromArgb(r.Next(2), r.Next(200), r.Next(2))); graf.DrawBeziers(p, v); i++; }
164

Se adaugpe un formular doubutoane i o casettext. Apsarea primului buton va determina afiarea textului din TextBox ntr-un MessageBox iar apsarea celui de-al doilea buton va nchide aplicaia (metoda Dispose() va nchide aplicaia). Dupadugarea celor doubutoane i a casetei text a fost schimbat textul afiat pe cele doubutoane au fost scrise funciile de tratare a evenimentului Clic pentru cele doubutoane:

Metodele Clear() i Add()


Exemplul 14: Controale pentru listare (ListBox, CheckedListBox, ComboBox, ImageList) ce pot fi legate de un DataSet, de un ArrayList sau de orice tablou (orice sursde date ce implementeaz interfaa IEnumerable).

n acest exemplu elementele selectate din CheckedListBox se adaugn ListBox. Dup adugarea pe formular a CheckedListBox-ului, stabilim colecia de itemi (Properties-ItemsCollection), butonul Selecie i ListBox-ul. Evenimentul Click asociat butonului Selectie golete mai nti listBox-ul (listBox1.Items.Clear();) i dupaceea adaugn ordine fiecare element selectat din CheckedListBox. Suplimentar se afieazo etichetcu itemii selectai.
private void button1_Click(object sender, System.EventArgs e) { MessageBox.Show(textBox1.Text); } private void button2_Click(object sender, System.EventArgs e) { Form1.ActiveForm.Dispose(); }

Metoda Draw()
Exemplul 16: Aplicaia este un exemplu de utilizare a controlului ImageList. Acesta este un control care conine o list de imagini, care poate fi setatla design (proprietatea Collection): Controlul ImageList dispune de o metodcare permite desenarea imaginilor pe care le conine. Iatexemplul (metodexecutatla clic pe un buton): n urma rulrii aplicaiei vei obine:
private void btnDeseneaza_Click(object sender, EventArgs e) { Graphics graphic = this.CreateGraphics(); for (int i=0; i < imageList1.Images.Count;i++) { imageList1.Draw(graphic, i * 120, 60, i); } graphic.Dispose(); }

Evenimentul DateSelected
Exemplul 17: MonthCalendar MonthCalendar afieazun calendar prin care se poate selecta o dat(zi, luna, an) n mod grafic. Proprietile mai importante sunt: MinDate, MaxDate, TodayDate ce reprezintdata minim/maximselectabili data curent(care apare afiatdifereniat sau nu n funcie de valorile proprietilor ShowToday,ShowTodayCircle. Exist2 evenimente pe care controlul le expune: DateSelected i DateChanged. n rutinele de tratare a acestor evenimente, programatorul are acces la un obiect de tipul DateRangeEventArgs care conine proprietile Start i End (reprezentnd intervalul de timp selectat). Formularul din aplicaie conine un calendar pentru care putem selecta un interval de

maximum 30 de zile, sunt afiate sptmnile i ziua curent. Intervalul selectat se afieazprin intermediul unei etichete. Dacse selecteazo datatunci aceasta va fi adugatca item ntr-un ComboBox (orice datpoate aprea cel mult o datn list). Dupadugarea celor 3 controale pe formular, stabilim proprietile pentru monthCalendar1 (ShowWeekNumber-True, MaxSelectionCount-30, etc.) i precizm ce se executatunci cnd selectm un interval de timp:
private void monthCalendar1_DateSelected(object sender, System.Windows.Forms.DateRangeEventArgs e) { this.label1.Text = "Interval selectat: Start = " +e.Start.ToShortDateString() + " : End = "+ e.End.ToShortDateString(); if (e.Start.ToShortDateString()==e.End.ToShortDateString()) {String x=e.Start.ToShortDateString(); if(!(comboBox1.Items.Contains(x)))comboBox1.Items.Add(e.End.ToShortDateString ());} }
169

Evenimentele MouseDown, MouseUp, MouseMove


Grupuri de controale Toolbar (ToolStrip) afieazo barde butoane n partea de sus a unui formular. Se pot introduce vizual butoane (printr-un designer, direct din Visual Studio.NET IDE), la care se pot seta att textul afiat sau imaginea. Evenimentul cel mai util al acestui control este ButtonClic (care are ca parametru un obiect de tip ToolBarButtonClicEventArgs, prin care programatorul are acces la butonul care a fost apsat).

II.5.4. Obiecte grafice


Spaiul System.Drawing conine tipuri care permit realizarea unor desene 2D i au rol deosebit n proiectarea interfeelor grafice. Un obiect de tip Point este reprezentat prin coordonatele unui punct ntr-un spaiul bidimensional Exemplu: Point este utilizat frecvent nu numai pentru desene, ci i pentru a identifica n program un punct dintr-un anumit spaiu. De exemplu, pentru a modifica poziia unui buton n fereastrputem asigna un obiect de tip Point proprietii Location indicnd astfel poziia colului din stnga-sus al butonului Exemplu: Putem construi un obiect de tip Point pentru a redimensiona un alt obiect. Structura Color conine date, tipuri i metode utile n lucrul cu culori. Fiind un tip valoare

(struct) i nu o clas, aceasta conine date i metode, nsnu permite instaniere, constructori, destructor, motenire. Substructura FromArgb a structurii Color returneazo culoare pe baza celor trei componente ale oricrei culori (red, green, blue). Clasa Graphics este o classigilatreprezentnd o arie rectangularcare permite reprezentri grafice. De exemplu, o linie frntse poate realiza astfel:
Size mySize = new Size(15, 100); Point myPoint = new Point(mySize); Console.WriteLine("X: " + myPoint.X + ", Y: " + myPoint.Y); Point myPoint = new Point(1, 2); button.Location = new Point(100, 30); Color myColor = Color.Brown; button1.BackColor = myColor;
173

Exemplul 19: Desen Aplicaia este un exerciiu care deseneazcercuri de raze i culori aleatoare i emite sunete cu frecvenaleatoare. Exemplul 19: Pictogram n exemplul urmtor se construiete o pictogrampe baza unei imagini.
Random x = new Random(); Console.Beep(300 + x.Next(1000), 150); Graphics g = this.CreateGraphics(); int i = 1 + x.Next(30); Pen p = new Pen(Color.FromArgb(x.Next(256), x.Next(256), x.Next(256))); g.DrawEllipse(p, x.Next(100), x.Next(100), i, i); Thread.Sleep(200); Image thumbnail; private void Thumbnails_Load(object sender, EventArgs e) { try{Image img = Image.FromFile("C:\\Imagini\\catel.jpg"); int latime=100, inaltime=100; thumbnail=img.GetThumbnailImage(latime, inaltime,null, IntPtr.Zero);} catch{MessageBox.Show("Nu exista fisierul");} } private void Thumbnails_Paint(object sender, PaintEventArgs e) {e.Graphics.DrawImage(thumbnail, 10, 10);} Point[] points = new Point[4]; points[0] = new Point(0, 0);points[1] = new Point(0, 120); points[2] = new Point(20, 120);points[3] = new Point(20, 0); Graphics g = this.CreateGraphics(); Pen pen = new Pen(Color.Yellow, 2);g.DrawLines(pen, points);
174

II.5.5. Validarea informaiilor de la utilizator


nainte ca informaiile de la utilizator sfie preluate i transmise ctre alte clase, este necesar sfie validate. Acest aspect este important, pentru a preveni posibilele erori. Astfel, dacutilizatorul introduce o valoare real(float) cnd aplicaia ateaptun ntreg (int), este posibil ca aceasta s

se comporte neprevzut abia cteva secunde mai trziu, i dupmulte apeluri de metode, fiind foarte greu de identificat cauza primara problemei.

II.5.5.(1) Validarea la nivel de cmp


Datele pot fi validate pe msurce sunt introduse, asociind o prelucrare unuia dintre handlerele asociate evenimentelor la nivel de control (Leave, Textchanged, MouseUp etc.)

II.5.5.(2) Validarea la nivel de utilizator


n unele situaii (de exemplu atunci cnd valorile introduse trebuie sse afle ntr-o anumit relaie ntre ele), validarea se face la sfritul introducerii tuturor datelor la nivelul unui buton final sau la nchiderea ferestrei de date.
private void textBox1_KeyUp(object sender, System.Windows.Forms.KeeyEventArgs e) {if(e.Alt==true) MessageBox.Show ("Tasta Alt e apasata"); // sau if(Char.IsDigit(e.KeyChar)==true) MessageBox.Show("Ati apasat o cifra"); }
175

II.5.5.(3) ErrorProvider
O maniersimplde a semnala erori de validare este aceea de a seta un mesaj de eroare pentru fiecare control .

II.5.6. MessageBox
Ne propunem ca n cele ce urmeazsrealizm o aplicaie simpl, n care vom folosi cteva controale i vom explica ceea ce se ntmpldin punct de vedere al programrii orientate obiect. Ne propunem sconstruim o fereastrcu un buton, pe care, dac-l apsm, s deschido altfereastrcu un mesaj: BUNA ZIUA! Pe fereastra care apare la iniializarea proiectului nostru, vom plasa un buton pe care scriem: APASATI. Dm dublu clic pe respectivul buton i scriem codul n funcia generatde aceastaciune: Pentru a compila i executa apsm F5. Obinem:
myErrorProvider.SetError(txtName," Numele nu are spatii in stanga"); private void btnValidate_Click(object sender, System.EventArgs e) { foreach(System.Windows.Forms.Control a in this.Controls) { if( a is System.Windows.Forms.TextBox & a.Text=="") { a.Focus();return;} } } MessageBox.Show("BUNA ZIUA!");
176

S analizm puin codul nostru, aducndu-ne aminte de noiunile de programare orientat obiect studiate:

MessageBox este o clas din spaiul de nume System.Windows.Forms, derivat din clasa Object Show este o metod static din clasa MessageBox n momentul n care se apasbutonul OK, fereastra cu acest mesaj se nchide, metoda Show cednd controlul. Metoda Show are mai multe forme n clasa MessageBox, fiind supradefinit. Apelul acestei funcii se va face n funcie de parametri. S considerm acum apelul funciei Show cu doi parametri: al doilea parametru se va referi la textul care apare pe bara de titlu n fereastrde mesaje:
MessageBox.Show("BUNA ZIUA!", "Salut");

S considerm n continuare apelul funciei Show cu trei parametri: al treilea parametru se va referi la butoanele care pot saparn fereastra de mesaje (sunt ase variante): Smai ncercm o alt form supradefinit a metodei Show, folosind patru parametri: al patrulea se va referi la icoana care sapar, alturi de textul BUNA ZIUA. Avem la dispoziie 9 icoane.
MessageBox.Show("BUNA ZIUA!", "Salut", MessageBoxButtons.YesNo); MessageBox.Show("BUNA ZIUA!", "Salut", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
178

II.5.7. Interfa definit de ctre utilizator


Sunt multe aplicaii n care, poate, dorim sne realizm o interfaproprie, ca form, n locul celei dreptunghiulare propusde Visual C#. Dac da, exemplul de mai jos ne va da o idee asupra a ce trebuie sfacem n acest caz. n primul rnd trebuie sne desenm propria fereastrde viitoare aplicaii. Pentru aceasta vom folosi, de exemplu, aplicaia Paint. Desenm o figurgeometriccare va constitui viitoarea noastrfereastr. Presupunem c dorim ca fereastra saibforma de oval.
179

Colorm ovalul cu o culoare dorit, iar pentru fundal alegem orice culoare, reinnd codul ei RGB
180

n cazul nostru: Red: 255 Greeen: 255 Blue: 0 Salvm desenul cu extensia gif: oval.gif

Strecem acum la Visual C#. Alegem: File | New Project | Windows Forms Application, iar ca nume InterfataUtilizator Aduc controlul PictureBox. Din PictureBox Task aleg imaginea care sapar: oval.jpg iar la Size Mode aleg StretchImage astfel nct imaginea sfie toatn PictureBox Deformez PictureBox-ul astfel nct ovalul desenat socupe o suprafacare s corespundesteticii programatorului
181

Selectez Form1, iar la proprietile corespunztoare voi selecta: BackColor 255;255;0 n acest moment fundalul ferestrei coincide ca i culoare cu fundalul desenului nostru TransparencyKey 255;255;0 - (aceleai valori ca i la culoarea fundalului) Dacvom compila observm cobinem, deocamdat, o fereastrn care existovalul desenat de noi, iar fundalul este transparent. Aceastfereastro putem deplasa, deocamdat doar folosind proprietatea barei de titlul atunci cnd inem cursorul mouse-ului apsat pe ea.
182

nchidem fereastra rezultat i ne continum proiectul. Aducem n Fereastra noastrun buton pe care-l vom folosi pentru nchiderea ferestrei rezultat
183

Scriem codul corespunztor dnd dublu clic pe buton: Includem biblioteca User32.dll n codul nostru: User32.dll este o bibliotecce conine rutine pentru interfaa utilizator (ferestre, meniuri, mesaje etc.) Dm clic pe PictureBox, ne ducem la Fereastra Properties i selectm evenimentele legate de acest control. Dm dublu clic pe evenimentul MouseDown i scriem n Fereastra Form1.cs codul corespunztor butonului stnga al mouse-ului, cod ce se referla posibilitatea de a putea prinde i deplasa interfaa noastr: Mai includem n sursa noastri: if (e.Button == MouseButtons.Left) { ReleaseCapture(); SendMessage(Handle, 0xA1, 0x2, 0); } [DllImport("User32.dll")] public static extern bool ReleaseCapture(); [DllImport("User32.dll")] public static extern int SendMessage(IntPtr Handle, int

Msg, int Param1, int Param2); this.Close();


184

n final codul arat: Revenim n fereastra Form1.cs[Designer], selectm Form1, iar la Properties alegem: FormBorderStyle None using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace Interfata3 { public partial class Form1 : Form { [DllImport("User32.dll")] public static extern bool ReleaseCapture(); [DllImport("User32.dll")] public static extern int SendMessage(IntPtr Handle, int Msg, int Param1, int Param2); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { this.Close(); } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { ReleaseCapture(); SendMessage(Handle, 0xA1, 0x2, 0); } } } } using System.Runtime.InteropServices;
185

Apsm F5 i surpriz(plcut ): obinem ceea ce ne-am propus:


186

II.5.8. Browser creat de ctre utilizator


O aplicaie interesant const n a ne crea propriul browser.

n Visual C# alegem: File | New Project | Windows Forms Application, iar ca nume BrowserUtilizator. n Form1, n Fereastra Properties, la Text scriem B R O W S E R, cuvnt care va apare pe bara de titlu. n aceastfereastraducem: TextBox la care, la TextBox Tasks bifm MultiLine Button la care-i schimbm Text-ul n GO WebBrowser pe care l aliniem duplaturile din stnga, dreapta i jos a ferestrei. Dm dublu clic pe butonul GO i scriem codul necesar navigrii: Rulm programul i n TextBox vom scrie o adresweb. Surprizplcut, navigatorul nostru funcioneaz!
webBrowser1.Navigate(textBox1.Text);
187

Necazurile ncep n momentul n care ncercm smaximizm fereastra browser-ului pentru a putea vizualiza mai bine informaiile afiate. Din pcate n acel moment obinem:
188

Observm cfereastra WebBrowser-ului nu s-a maximizat odatcu cea a ferestrei aplicaiei. Rezultcaceastncercare de a realiza un browser propriu nu este corect. Vom ncerca altmetod. De la grupul de controale Container aleg SplitContainer. De la opiunea Split Container Task aleg Horizontal splitter orientation
189

Deformez cele doupanouri ale containerului astfel ncnt panoul de mai sus sfie mai mic, iar Panoul 2 socupe o suprafamai mare din fereastra noastr. n Panoul 1 vom plasa TextBox-ul i Button-ul, iar n Panoul 2 WebBrowser-ul. Pentru WebBrowser aleg proprietatea Doc in parent container, moment n care WebBrowser-ul se va lipi (va adera) de marginile marginile Panoului 2 Dm dublu clic pe butonul GO i scriem acelai cod ca mai nainte. Rulm programul i observm cdacmaximizm fereastra WebBrowser-ul rmne lipit de marginile ferestrei. Singurul lucru care nu ne mulumete este faptul cla maximizarea ferestrei TextBox-ul i Button-ul rmn pe loc i nu aderla marginile ferestrei. Scorectm acest lucru. Selectm TextBox-ul. dupcare din fereastra Properties dm clic n csua corespunztoare proprietii Anchor. Suntem asistai grafic pentru a stabili partea n care dorim ca TextBox-ul sfie lipit de margini.
190

Alegem Stnga, Dreapta i Sus dnd clic pe segmentele corespunztoare. La fel procedm pentru butonul GO, unde alegem Sus i Dreapta Din acest moment cele doucontroale aflate n Panoul 1 se vor deplasa odatcu marginile ferestrei. Browserul nostru poate fi mbuntit, n sensul adugrii de noi butoane care sofere utilizatorului opiuni suplimentare: pentru navigarea napoi n lista de adrese pentru navigarea nainte n lista de adrese pentru pagina de start Cele patru butoane le putem alinia i aduce la aceeai dimensiune folosind opiunile de pe bara de instrumente: Selectarea tuturor butoanelor se poate face fie cu clic i Ctrl pe fiecare, fie nconjurnd cu mouse-ul respectivele butoane (n acest timp butonul stng al mouse-ului este apsat). Pe butoane fiecare poate spun, dupgustul su, imagini n loc de aceste simboluri.
191

Vom scrie n continuare codul corespunztor fiecrui buton, dnd dublu clic pe respectivul control: webBrowser1.GoBack(); webBrowser1.GoForward(); webBrowser1.GoHome(); //pagina goala sau webBrowser1.Navigate("www.google.com");//sau orice alta //adresa web O altmetodpentru deformarea proporionala WebBrowser-ului, mpreuncu ferestra aplicaiei, o putem realiza doar folosind proprietatea Anchor pentru toate elementele din fereastr. control Anchor textBox Top, Left, Right button Top, Right webBrowser Top, Bottom, Left, Right

II.5.9. Ceas
Utilizatorul nu are drept de control asupra tuturor controalelor. Existcontroale de control al executrii (Timer) sau de dialog (OpenFileDialog, SaveFileDialog, ColorDialog, FontDialog, ContextMenu). Dintre acestea vom studia n cele ce urmeazcontrolul Timer asupra cruia are drept de interaciune doar cel care dezvoltaplicaia.

Observm caducnd din Toolbox controlul Timer, acesta nu se afieazpe formular, el aprnd ntr-o zongri a suprafeei de lucru (Designer).
192

Vom stabili urmtoarele proprieti legate de Timer: Proprietate Valoare Explicaie (Name) aplCeas Enabled True Activarea controlului de timp Interval 1.000 Numrul de milisecunde dintre apelurile la metoda de tratare a evenimentului. Se stabileste, n cazul de fanumrtoarea din secundn secund Aducem n formular un control Label cu urmtoarele proprieti: Control Proprietate Valoare label1 (Name) labelCeas AutoSize False BorderStyle Fixed3D FontSize 16,25, Bold Location 82;112
193

Text Size 129;42 TextAlign MiddleCenter Dm clic pe icoana de la timer care are numele aplCeas, iar la Events, la Tick selectm aplCeas_Tick Dm dublu clic pe aplCeas_Tick i inserm codul: Compilm i obinem ntr-o fereastr vizualizarea orei sistemului
private void lblCeas_Tick(object sender, EventArgs e) { DateTime OraCurenta = DateTime.Now; lblCeas.Text=OraCurenta.ToLongTimeString(); }
194

II.6. Accesarea i prelucrarea datelor prin intermediul SQL Server


II.6.1. Crearea unei baze de date. Conectare i deconectare.
nainte de a crea orice obiect al unei baze de date trebuie screm baza de date. Pentru a

realiza acest lucru trebuie sdeschidei aplicaia Microsoft SQL Server Management Studio Express, i sacceptai conectarea la server-ul local. n momentul deschiderii aplicaiei fereastra acestei aplicaii va conine fereastra Object Explorer, fereastra Sumarry i fereastra Properties. Pentru a crea o noubazde date din fereastra Object Explorer ce se afln stnga ferestrei principale, executai clic pe butonul din dreapta al mouse-ului dupselectarea folderului Databases, de unde alegei opiunea New Database..
195

Denumii aceastbazde date (n exemplul de mai jos noi i-am spus CLASA). Creai un tabel alegnd n acelai mod ca i cel prezentat mai sus opiunea New Table, din folder-ul Table. Definii coloanele tabelului prin stabilirea componentelor: numele coloanei acesta trebuie sfie unic n cadrul tabelei tipul de date tipul de date trebuie sfie un tip de date valid, din acest motiv este bine s utilizai unul dintre tipurile de date ce vapar n lista derulant Stabilii cheia primara tabelei prin selectarea rndului unde dorii sstabilii cheia primar i apoi prin executarea unui clic pe butonul din dreapta al mouse-ului i alegerea opiunii Set Primary Key

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