Documente Academic
Documente Profesional
Documente Cultură
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
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.
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:
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.
{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:
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
(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
se comporte neprevzut abia cteva secunde mai trziu, i dupmulte apeluri de metode, fiind foarte greu de identificat cauza primara problemei.
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
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
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
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
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