Sunteți pe pagina 1din 80

3.1.

PROIECTAREA UNEI FORME (FORMULAR) Formele (formularele) constituie elementul de la care se ncepe construirea unei interfee n Visual Basic, constituind practic ferestrele prin intermediul crora utilizatorul va interaciona cu aplicaia. Formele posed propriile proprieti, evenimente i metode cu ajutorul crora putem controla modul de afiare i comportamentul. Primul pas n proiectarea unei forme este s-i stabilim proprietile. Majoritatea proprietilor formei influeneaz modul de afiare. Proprietatea Text stabilete titlul care va fi afiat n bara de titlu a formei; proprietatea Icon stabilete iconia pentru form; proprietatea MaximizeBox i MinimizeBox stabilesc dac forma poate s fie maximizat sau minimizat. Proprietile Height i Width stabilesc dimensiunile iniiale ale formei; proprietatea WindowState stabilete modul n care se va afia forma la nceput: minimizat, maximizat sau normal; proprietatea Name stabilete un identificator cu ajutorul cruia putem referi forma respectiv. Observaie: n mod implicit VB le numete Form1, Form2, etc. Este recomandat s schimbm aceste denumiri cu unele mai familiare i mai uor de reinut. Cel mai bun mod de a ne familiariza cu proprietile este s le experimentm. Schimbai pe rnd diferite proprieti i executai aplicaia ca s vedei efectul. Ca orice obiect forma (formularul) poate executa diverse operaii (metode) i poate rspunde la evenimente. Evenimentul Resize al unei forme se declaneaz ori de cte ori forma este redimensionat fie de utilizator, fie prin intermediul codului. Acest eveniment al formei ofer posibilitatea de a executa anumite aciuni - cum ar fi mutarea sau redimensionarea controalelor de pe form - n momentul n care aceasta i schimb poziia sau dimensiunile. Pentru a afia o form pe ecran se va utiliza metoda Show. Form1.Show (Form1 reprezint numele formei). Pentru a nltura o form de pe ecran (a o ascunde) vom folosi metoda Hide sau funcia Form1.Hide La crearea unui proiect Visual Basic creaz o form numit implicit Form1. Utilizatorul insereaz n aceast form controalele (obiectele) prin intermediul crora realizeaz funciile cu care i atinge obiectivele. n exemplul urmtor se urmrete prezentarea i testarea unor proprieti a controalelor Form i Label, precum i cum arat inserate n form controalele Button i ComboBox.

Fig. 3.1.1 Crearea unei forme Pentru a nscrie textul a fost creat un obiect etichet (Label) i la proprietatea Text a acestuia (din fereastra Properties) a fost specificat textul Aceasta este prima form pe care o realizm. Dac vrem s schimbm numele nscris n titlul formei (Form1) vom nscrie n dreptul proprietii Name numele dorit. Activnd proprietatea BackgroundImage vom putea alege o imagine (un fiier bmp, jpg, gif ) care s fie aplicat pe forma noastr, ca fundal. Facei lucrul acesta! Schimbai apoi culorile, stabilii alt format de scriere a textului (mrime, culoare, stil). Mrii i micorai dimensiunea formei, testai pe rnd proprietile acesteia. Executai apoi aplicaia pentru a vedea ce realizeaz practic. Pentru aceasta fie activm meniul DEBUG i de acolo opiunea Start Debugging, fie activm butonul Start din bara de butoane.

Vom prezenta acum n detaliu, principalele proprieti, evenimente i metode ale unui control Form sau Formular: Tabel 1 Proprietile formei Proprietate BackColor FormBorderStyle Descriere Culoarea de fundal a formei. Putei selecta o culoare Windows sau putei selecta dintr-o palet de culori Setat la None atunci cnd nu exist elemente de margine sau cnd exist doar elemente ca un meniu de control sau butoane de minimizat sau maximizat; FixedSingle pentru margini cu mrime fix; Sizable (default) pentru margine ajustabil; Fixed3D pentru margine cu mrime fix care include o muchie dubl. Textul care apare n zona de titlu a formei. Textul default este Numele formei (implicit Form1, Form2..). Dac este Adevrat (default), forma conine un buton de control i un meniu de control. Dac este fals, forma nu conine un buton de control i un meniu de control. Dac este setat True (defalt), forma poate rspunde la evenimente. Altfel, Visual Basic oprete procesarea evenimentelor pentru forma respectiv. Nu are nici un efect asupra textului din Text, dar afecteaz textul pe care l vei afia n cele din urm pe form dac utilizai comanda Print. Nu are nici un efect asupra textului din Text, dar afecteaz textul pe care l vei afia n cele din urm pe form dac utilizai comanda Print Nu are nici un efect asupra textului din Text, dar afecteaz textul pe care l vei afia n cele din urm pe form dac utilizai comanda Print Nu are nici un efect asupra textului din Text, dar afecteaz textul pe care dumneavoastr l vei afia n cele din urm pe form dac utilizai comanda Print Nu are nici un efect asupra textului din Text, dar afecteaz textul pe care dumneavoastr l vei afia n cele din urm pe form dac utilizai comanda Print Nu are nici un efect asupra textului din Text, dar afecteaz textul pe care dumneavoastr l vei afia n cele din urm pe form dac utilizai comanda Print. Culoarea textului din prim plan pe care l afiai pe form dac utilizai comanda Print. nlimea formei n twips. Pictograma pe care utilizatorul o vede dup ce minimizeaz

Text ControlBox

Enabled (Activat) Fontul Bold

Fontul Italic

Font Name (Nume Font) FontSize (Mrime font) Font Strikethrough

FontUnderline

ForeColor Height (nlimea) Icon

(Iconia) KeyPreview

forma. Dac este Fals (default), controlul evideniat primete urmtoarele evenimente: KeyDown, KeyUp, i KeyPress naintea formei. Dac este True, forma primete evenimentele naintea controlului. Dac este True (default), butonul de maximizare apare pe form n timpul utilizrii. Dac este Fals, utilizatorul nu poate maximiza fereastra formei. Dac este Adevrat (default), butonul de minimizare apare pe form n timpul utilizrii. Dac este Fals, utilizatorul nu poate minimiza fereastra formei. Forma pe care o ia cursorul atunci cnd utilizatorul mic mouse-ul peste form. Reprezint o gam de forme diferite pe care le poate lua cursorul. Numele formei. Default, Visual Basic genereaz numele Form1. Un fiier imagine care va fi afiat pe fundalul formei. Nu se folosete de ctre Visual Basic. Aceasta este destinat programatorului pentru identificarea unui comentariu aplicat la form.. Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i deci poate folosi sau nu) forma. Limea formei n twips. Descrie starea de nceput a formei cnd utilizatorul ruleaz programul. Dac este setat Normal (default), forma apare mai nti la mrimea pe care ai stabilit-o dumneavoastr. Dac este setat Minimize, forma apare mai nti minimizat. Dac este Maximize, forma apare mai nti maximizat.

MaximizeBox

MinimizeBox

Cursor

Name (Numele) BackgroundImage (Imagine) Tag

Visible (Vizibil) Width (Limea) WindowState

Recapitulare: Putei personaliza forma n multe feluri. O putei maximiza sau minimiza. Putei folosi culori i stiluri diferite. De cele mai multe ori, vei dori o form simpl cu un text n titlu care s identifice aplicaia; n acest caz, singurele valori ale proprietii pe care va trebui s le modificai sunt cele ale textului din Text. Tabelul 2. Evenimentele formei. Eveniment Descriere Click DoubleClick Apare cnd utilizatorul efectueaz click pe form. Apare cnd utilizatorul efectueaz dublu click pe form.

Deactivate (Dezactivare) DragDrop DragOver KeyDown

Are loc atunci cnd o alt form devine o fereastr activ. Apare cnd operaiunea drag peste o form se ncheie. Apare n timpul unei operaiuni drag pe form. Apare cnd utilizatorul apas o tast, att timp ct proprietatea Previzualizare Tast are valoarea Adevrat pentru controalele de pe form; altfel, controlul primete evenimentul KeyDown. Apare cnd utilizatorul apas o tast pe form.. Apare cnd utilizatorul elibereaz o tast. Apare cnd forma se ncarc i nainte ca ea s apar pe ecran. Apare cnd utilizatorul apas butonul de mouse pe form. Apare cnd utilizatorul mic mouse-ul peste form. Apare cnd utilizatorul elibereaz butonul de mouse pe form. Apare atunci cnd Visual Basic trebuie s redeseneze o form deoarece un alt obiect a suprascris o parte a formei iar apoi utilizatorul a mutat obiectul i a expus partea ascuns a formei. Apare atunci cnd utilizatorul redimensioneaz forma.

KeyPress KeyUp Load MouseDown MouseMove MouseUp Paint

Resize

3.2. BUTON DE COMAND (BUTTON) Un buton de comand este un control (obiect) care are o anumit form, afieaz o etichet i permite utilizatorului s comande execuia unor aciuni prin activarea lui. Vom utiliza deci butoanele de comand pentru a permite utilizatorilor s-i dea comenzi aplicaiei, s-i cear acesteia s ndeplineasc anumite funcii. Utilizatorii vor executa click mouse pe buton sau l vor selecta n alt mod (apsnd tasta Tab pn ajung la ele, apoi tasta Enter), moment n care butonul va arta ca i cum ar fi apsat. Ca efect se va executa secvena de cod (instruciuni Visual Basic) care a fost asociat acestui eveniment al controlului buton de comand. Proprietatea Text ne permite s afim un anumit text pe buton, de exemplu: OK, Cancel, Adaug, terge, Exit, etc. Cum procedm practic: Selectm din fereastra din stnga, numit fereastra de obiecte, obiectul dorit (button) i apoi l aducem (cu buton stnga mouse apsat) n cadrul formei, la locul dorit. i stabilim dimensiunile dorite (ca orice obiect, el trebuie selectat i apoi fie c tragem de coluri pentru a-i schimba dimensiunea, fie c acionm asupra marcajelor laterale). El apare iniial cu numele dat de sistem n mod automat: Button1 (sau 2,3 etc dup numrul de ordine). Putem schimba numele atribuit acestuia, nscriindu-l pe cel dorit la proprietatea Name (n acest caz acesta va fi numele cu care el va fi identificat i referit de sistem n acest exemplu EXIT). Exerciiu:

Schimbai culoarea butonului, formatul de scriere al textului de pe buton, eventual plasai o imagine pe buton. Testai proprietile puse la dispoziia dvs de program. Cel mai frecvent eveniment ntlnit la acest control i pentru care vom scrie cel mai mult cod este evenimentul Click. De cte ori utilizatorul va face clic mouse pe acest buton evenimentul se va produce i va determina executarea codului scris n procedura numit: NumeButon_Click(). Exerciiu: La clic mouse pe butonul EXIT se dorete terminarea programului. n acest caz se va scrie procedura care va fi executat la clic mouse pe butonul respectiv. Cum scriem procedura? Pentru aceasta, se va face dublu clic mouse pe butonul nostru, moment n care se va deschide o nou pagin (fereastra de editare a codului) cu numele procedurii care se va scrie i cursorul plasat acolo (n regim de editare). Acelai efect l putem obine i activnd meniul View i de acolo comanda Code (pentru a deschide fereastra n care s se scrie codul). Procedura va arta astfel: Private Sub EXIT_Click() end End Sub Executnd din nou aplicaia, la clic mouse pe butonul EXIT se termin programul i se revine n modul de lucru Proiectare (Design) pentru a continua eventual proiectarea aplicaiei noastre cu adugarea altor obiecte (controale) i a altor metode asociate. Prezentm n continuare lista de proprieti i evenimente ale controlului Button. Tabelul 1 Proprietile butonului de comand Proprietate BackColor (Culoarea de fundal) Descriere Butonul de comand este unul dintre puinele controale pentru care proprietatea Culoare de fundal nu prea are importan. Cnd schimbai culoarea de fundal, doar linia punctat din jurul textului butonului de comand i schimb culoarea. Textul care apare pe butonul de comand Iconia care apare atunci cnd utilizatorul folosete funcia drag pentru un buton de comand pe o form. Dac este setat True (default), butonul de comand poate rspunde la evenimente. Altfel, Visual Basic oprete procesarea evenimentelor pentru controlul respectiv. Mrimea, n puncte, a fontului folosit pentru textul afiat pe butonul de comand. Adevrat (default), n cazul n care textul este afiat n caractere strikethrough (caracterele au o linie peste ele). Adevrat (default), n cazul n care textul este afiat n caractere subliniate.

Text DragIcon Enabled (Activat) FontSize (Mrime font) Font Strikethrough Font Underline

Height (nlimea) Cursor (Cursorul de Mouse) Name (Numele) TabIndex

nlimea, n twips, a unui buton de comand. Forma pe care o ia cursorul atunci cnd utilizatorul mic mouse-ul peste butonul de comand. Reprezint o gam de forme diferite pe care le poate lua cursorul. Numele controlului. n mod implicit, Visual Basic genereaz numele Command1, Command2 i aa mai departe, pe msur ce mai adugai butoane pe form. Ordinea numerotrii ncepe de la 0 i crete de fiecare dat cnd adugai un nou control. Putei schimba ordinea evidenierii schimbnd TabIndex la alte valori. Nu se poate ca dou controale de pe aceeai form s aib aceeai valoare TabIndex. Dac este True, utilizatorul poate apsa Tab pentru a muta evidenierea pe acest buton de comand. Dac este fals, acest buton de comand nu poate fi evideniat. Nu se folosete de ctre Visual Basic. Aceasta este destinat programatorului pentru identificarea unui comentariu aplicat la butonul de comand. Numrul de twips de la marginea de sus a unui buton de comand pn la marginea de sus a formei. Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i deci poate folosi sau nu) respectivul buton de comand. Numrul de twips pe care le ocup respectivul buton de comand n lime. Tabelul 2 Evenimentele butonului de comand Descriere Apare cnd utilizatorul efectueaz click pe butonul de comand. Apare cnd operaiunea drag a butonului de comand se ncheie. Apare n timpul unei operaiuni drag a butonului de comand. Apare cnd utilizatorul apas o tast, iar proprietatea Previzualizare Tast are valoarea Fals pentru orice control de pe form; altfel, forma primete evenimentul KeyDown Apare cnd utilizatorul apas o tast de acces la butonul de comand. Apare cnd utilizatorul elibereaz o tast.

TabStop

Tag

Top Visible (Vizibil) Width (Limea)

Eveniment Click DragDrop DragOver KeyDown

KeyPress KeyUp

3.3. CONTROALE CARE MANIPULEAZ TEXTE Principalele controale utilizate pentru manipularea textelor sunt: etichet (Label) caset de text (TextBox).

3.3.1. Controlul Etichet (LABEL) Controlul Etichet este un control grafic folosit pentru afiarea de text pe care utilizatorul nu l poate modifica. Textul ce va fi afiat se stabilete prin intermediul proprietii Text. Acesta poate fi stabilit din faza de proiectare, dar se poate modifica n timpul execuiei prin intermediul unei proceduri asociate. Principalele proprieti i evenimente ale controlului Etichet se prezint astfel: Tabelul 1. Proprietile controlului Etichet (Label) Proprietate AutoSize Descriere Dac este True, controlul se va ajusta automat pentru a ncadra exact coninutul textului. Dac este Fals (default), controlul va trece de marginea din dreapta a textului dac eticheta nu este suficient de mare pentru a cuprinde ntreaga captur. Culoarea de fundal a etichetei. Numrul su hexadecimal reprezint una din miile de posibile valori de culoare din Windows. Putei selecta dintr-o palet de culori afiat de Visual Basic cnd dorii s stabilii proprietatea Culoarea de fundal. Culoarea prestabilit (default) este aceeai cu cea a formei. Setat la None atunci cnd nu exist elemente de margine, FixedSingle pentru margini cu mrime fix; Fixed3D pentru margine cu mrime fix care include o muchie dubl. Textul care apare ntr-o etichet. Dac este setat True (default) controlul etichetei poate rspunde la evenimente. Altfel, Visual Basic oprete procesarea evenimentelor pentru controlul respectiv. Adevrat (default), n cazul n care textul este afiat n caractere bold. Adevrat (default), n cazul n care textul este afiat n caractere italice. Numele tipului de caractere folosit de controlul etichetei. n mod normal, vei folosi numele unui font TrueType din Windows. Mrimea, n puncte, a fontului folosit pentru textul etichetei. Adevrat (default), n cazul n care textul este afiat n caractere strikethrough (caracterele au o linie peste ele). Adevrat (default), n cazul n care textul este afiat n caractere subliniate. Culoarea textului din interiorul textului. nlimea controlului etichetei, n twips. Forma pe care o ia cursorul atunci cnd utilizatorul mic mouseul peste controlul etichetei. Reprezint o gam de forme diferite pe care le poate lua cursorul.

BackColor (Culoarea de fundal)

BorderStyle

Text Enabled (Activat) Fontul Bold Fontul Italic Font Name (Nume Font) FontSize (Mrime Font) Font Strikethrough Font Underline ForeColor Height (nlime) Cursor (Cursorul de Mouse)

Name (Numele) TabIndex

Numele controlului. Default, Visual Basic genereaz numele Label1, Label2 i aa mai departe, pe msur ce adugai mai multe controale de etichet la form. Ordinea numerotrii ncepe de la 0 i crete de fiecare dat cnd adugai un nou control. Putei schimba ordinea evidenierii schimbnd TabIndex la alte valori. Nu se poate ca dou controale de pe aceeai form s aib aceeai valoare TabIndex Nu se folosete de ctre Visual Basic. Aceasta este destinat programatorului pentru identificarea unui comentariu aplicat la controlul etichetei. Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i deci poate folosi sau nu) respectivul control de etichet. Numrul de twips pe care-i ocup respectivul control etichet n lime. Tabelul 2. Evenimentele controlului Etichet (Label)

Tag

Visible (Vizibil) Width (Limea)

Eveniment Click Double Click DragDrop DragOver MouseDown MouseMove MouseUp

Descriere Apare cnd utilizatorul efectueaz click pe etichet. Apare cnd utilizatorul efectueaz dublu click pe etichet.. Apare cnd operaiunea drag a etichetei se ncheie. Apare n timpul unei operaiuni drag a etichetei. Apare cnd utilizatorul apas butonul de mouse pe etichet. Apare cnd utilizatorul mic mouse-ul peste etichet. Apare cnd utilizatorul elibereaz butonul de mouse pe etichet.

3.3.2. Controlul Caset de text (TextBox) Spre deosebire de controlul etichet, controlul Caset de text este folosit pentru a afia textul specificat de dumneavoastr din faza de proiectare (la proprietatea Text), sau introdus de utilizator la execuie sau asociat controlului prin program. Prin urmare acest control poate fi folosit i pentru ca aplicaia s preia diferite informaii de la utilizatori. Textul care se va afia sau care va fi preluat se gestioneaz cu ajutorul proprietii Text. Dac textul trebuie afiat pe mai multe linii, proprietatea MultiLine trebuie s aib valoarea True. Dac este necesar, cu ajutorul proprietii ScrollBars se pot aduga bare de defilare controlului. Exerciiul 1: S se realizeze o aplicaie care s realizeze concatenarea a dou iruri introduse de la tastatur. Rezolvare: Vom proiecta o form pe care vom specifica funciile aplicaiei i vom pune la dispoziia utilizatorului dou casete de tip Text (Text Box) pentru a specifica cele dou iruri i o a treia caset pentru a afia rezultatul.

Vom mai pune la dispoziia utilizatorului un buton de comand pentru a determina procedura de calcul, un buton pentru ieirea din aplicaie i unul pentru a terge coninutul casetelor n vederea relurii calculului (un fel de Reset). Vom terge textul scris iniial la proprietatea Text a celor trei casete de text (Text1, Text2 i respectiv Text3) i vom lsa deci spaiu. Vom scrie la proprietatea Text a fiecrui buton de comand textul dorit, respectiv: Concatenare, Reset, EXIT. La lansarea n execuie (cu DEBUG Start Debugging sau apsnd tasta F5) aplicaia se prezint astfel:

Utilizatorul va introduce cele dou iruri i, dac va aciona butonul Concatenare aplicaia va afia rezultatul obinut, astfel:

Acionnd butonul Reset aplicaia iniializeaz cu spaiu coninutul celor trei casete de text i este gata s accepte alte valori ale celor 2 iruri. Prin urmare, procedura de cod asociat acestui buton de comand va trebui s realizeze aceste funciuni.

Procedurile asociate celor trei butoane de comand sunt:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox3.Text = TextBox1.Text + TextBox2.Text End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub

Exerciiul 2: Adgai pe forma de mai sus un buton nou, la apsarea cruia s se calculeze suma a dou numere introduse de la tastatur prin intermediul celor dou casete de text. Rezolvare: Vom modifica mai nti textul afiat n partea de sus pentru a preciza corect funciile aplicaiei. Din analiza problemei, reiese c se poate cere fie concatenarea (alipirea) valorilor introduse n cele dou casete de text, fie suma acestora, dac au fost introduse valori numerice.

n acest caz, procedura de calcul asociat butonului nou introdus introduce funcii de conversie: Val(ir) - pentru a transforma irul de caractere din variabila Text n valoare numeric i a se putea efectua astfel calculul aritmetic (adunarea). Procedura va fi n acest caz:
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text) End Sub

Prezentm n continuare lista detaliat a proprietilor i evenimentelor controlului TextBox: Tabelul 1. Proprietile controlului Text Box. Proprietate BackColor (Culoarea de fundal) BorderStyle Descriere Culoarea de fundal a respectivului text box. Putei selecta dintro palet de culori afiat de Visual Basic cnd dorii s stabilii proprietatea Culoarea de fundal. Culoarea prestabilit (default) este aceeai cu cea a formei. Setat la None atunci cnd nu exist elemente de margine, FixedSingle pentru margini cu mrime fix; Fixed3D pentru margine cu mrime fix care include o muchie dubl. Dac este setat True (default) acel text box poate rspunde la evenimente. Altfel, Visual Basic oprete procesarea evenimentelor pentru controlul respectiv. Adevrat (default), n cazul n care textul este afiat n caractere bold. Adevrat (default), n cazul n care textul este afiat n caractere italice. Numele tipului de caractere folosit de text box. n mod normal, vei folosi numele unui font TrueType din Windows. Mrimea, n puncte, a fontului folosit pentru scrierea textului din controlul text box. Adevrat (default), n cazul n care textul este afiat n caractere

Enabled (Activat) Font Bold Font Italic Font Name (Numele Fontului) FontSize (Mrime Font) Font Strikethrough

strikethrough (caracterele au o linie peste ele). Font Underline ForeColor Height (nlimea) MaxLength Adevrat (default), n cazul n care textul este afiat n caractere subliniate. Culoarea textului din interiorul proprietii Text. nlimea respectivului text box n twips. Dac este 0 (default), atunci limita valorii textului poate fi pn la 32767de caractere. Altfel, MaxLength specific numrul de caractere pe care utilizatorul le poate introduce n text box.

Cursor Forma pe care o ia cursorul atunci cnd utilizatorul mic (Cursorul de mouse) mouse-ul peste text box. reprezint o gam de forme diferite pe care le poate lua cursorul. MultiLine Dac este True, respectivul text box poate afia mai mult de o linie de text. Dac este Fals (default), acel text box conine o singur linie de text, adesea lung. Textul poate conine un carriage return. Numele controlului. Default, Visual Basic genereaz numele Text1, Text2 i aa mai departe, pe msur ce adugai mai multe text box la form. Dac introducei un caracter, cum ar fi un asterisc (*) pentru PasswordChar, Visual Basic nu afieaz textul utilizatorului, ci caracterul respectiv (n timp ce utilizatorul introduce textul). Folosii text box cu setarea PasswordChar atunci cnd utilizatorul are nevoie de o parol i nu dorii ca alii s vad parola introdus. Astfel, n timp ce respectivul text box va recepta caracterele tastate de utilizator, pe ecran vor fi afiate doar caracterele PasswordChar. Setat pe 0 cnd nu exist bare de scroll, 1 pentru o bar orizontal, 2 pentru o bar vertical sau 3 pentru ambele tipuri de bare. Ordinea numerotrii ncepe de la 0 i crete de fiecare dat cnd adugai un nou control. Putei schimba ordinea evidenierii schimbnd TabIndex la alte valori. Nu se poate ca dou controale de pe aceeai form s aib aceeai valoare TabIndex. Dac este True, utilizatorul poate apsa Tab pentru a muta evidenierea pe acest control de etichet. Dac este fals, acest control de etichet nu poate fi evideniat. Nu se folosete de ctre Visual Basic. Aceasta este destinat programatorului pentru identificarea unui comentariu aplicat la text box. Valoarea inial pe care utilizatorul o vede n text box. Valoarea default este numele controlului. Valoarea continu s se updateze pe msur ce utilizatorul introduce noi texte n tipul rulrii. .

Name (Numele) PasswordChar

ScrollBars

TabIndex

TabStop

Tag

Text

Visible (Vizibil) Width (Lime)

Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i deci poate folosi sau nu) respectivul text box. Numrul de twips pe care-i ocup respectivul text box n lime

Tabelul 2. Evenimentele controlului Text Box. Aciune DragDrop DragOver KeyDown Descriere Apare cnd operaiunea drag respectivului text box se ncheie. Apare n timpul unei operaiuni drag a unui text box. Apare cnd utilizatorul apas o tast, att timp ct proprietatea Previzualizare Tast are valoarea Adevrat; altfel, text box primete evenimentul KeyDown. Apare cnd utilizatorul apas o tast pe text box. Apare cnd utilizatorul elibereaz o tast pe text box

KeyPress KeyUp

3.4. CONTROALE CARE PERMIT ALEGEREA UNOR OPIUNI Majoritatea aplicaiilor permit utilizatorilor s aleag dintre anumite opiuni, pornind de la un simplu da sau nu pn la selectarea unor articole dintr-o list cu multe posibiliti. 3.4.1. Caseta de validare (CheckBox) Un control caset de validare ofer utilizatorilor posibilitatea de a alege sau nu o anumit opiune. De regul sunt prezentate utilizatorului mai multe opiuni ataate unor casete de validare, mai multe dintre acestea putnd fi selectate la un moment dat. Cnd utilizatorul alege o opiune, caseta de validare corespunztoare opiunii respective este marcat; semnul de marcare dispare cnd caseta este deselectat. Prorietatea Checked este utilizat pentru a determina starea controlului: True= bifat, False= nebifat. Cu ajutorul proprietii Text putem aduga textul explicativ dorit n dreptul casetei. n cadrul unei forme pot exista deci o multitudine de casete de validare, utilizatorul avnd posibilitatea s bifeze cte dorete. Ca i la butoanele de comand, evenimentul click al controlului apare ori de cte ori utilizatorul efectueaz clic mouse pe caseta de validare. n acel moment procedura aferent evenimentului clik al controlului i ncepe execuia. Procedura asociat evenimentului va trebui s testeze starea n care se afl caseta de val idare i, n funcie de aceasta, s execute o anumit sarcin. Exemplu: Creai o form pe care adugai un control tip caset de validare numit Verifica i un control de tip etichet numit Mesaj . Eticheta va afia un text indicnd starea casetei (bifat, nebifat sau indisponibil). Rezolvare: Se definete caseta Chek cu numele Verifica i mesajul respectiv.

Se definesc dou controale tip etichet: unul Label1 cu textul Starea casetei la proprietatea Text, i altul Label2 avnd iniial spaiu la proprietatea Text. Aceasta i va modifica proprietatea Text n timpul execuiei i va afia un mesaj corespunztor strii casetei. Pentru aceasta se scrie procedura (cod) ataat evenimentului Click al casetei de validare cu numele Verific. Executnd aplicaia noastr, se obine: Procedura ataat evenimentului click al casetei Verifica este:
Private Sub Verifica_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Verifica.CheckedChanged If Verifica.Checked = True Then Label2.Text = "Caseta este bifata" ElseIf Verifica.Checked = False Then Label2.Text = "Caseta nu este bifata" End If End Sub

Prezentm n continuare principalele proprieti i evenimente ale controlului caset de validare (CheckBox): Tabel 1. Proprietile controlului Check Box Proprietate BackColor (Culoarea de fundal) Descriere Culoarea de fundal a controlului check box. Putei selecta dintr-o palet de culori afiat de Visual Basic cnd dorii s stabilii proprietatea Culoarea de fundal. Culoarea prestabilit (default) este aceeai cu cea a formei. Textul care apare asociat unui check box. Dac precedai orice

Text

caracter din text cu un &, acel caracter se va comporta ca tasta de acces a respectivului check box. Enabled (Activat) Font Bold Font Italic Font Name (Nume font) Font Size (Mrime font) Font Strikethrough Dac este setat True (default), check box poate rspunde la evenimente. Altfel, Visual Basic oprete procesarea evenimentelor pentru controlul respectiv. Adevrat (default), n cazul n care textul asociat este afiat n caractere bold. Altel, Fals. Adevrat (default), n cazul n care textul asociat este afiat n caractere italice. Altel, Fals. Numele tipului de font folosit de textul din check box. n mod normal, vei folosi numele unui font TrueType din Windows. Mrimea, n puncte, a fontului folosit pentru textul din check box. Adevrat (default), n cazul n care textul asociat este afiat n caractere strikethrough (caracterele au o linie peste ele). Altel, Fals. Adevrat (default), n cazul n care textul asociat este afiat n caractere subliniate. Altel, Fals. Codul hexadecimal de culoare al culorii textului asociat check box.. nlimea, n twips, a unui check box. Forma pe care o ia cursorul atunci cnd utilizatorul mic mouse-ul peste check box. Valorile posibile sunt de la 0 la 12 i reprezint o gam de forme diferite pe care le poate lua cursorul. Numele controlului. Default, Visual Basic genereaz numele Check1, Check2 i aa mai departe, pe msur ce adugai mai multe check box la form. Ordinea de numerotare a controalelor din form ncepe de la 0 i crete de fiecare dat cnd adugai un nou control. Putei schimba ordinea evidenierii schimbnd TabIndex la alte valori. Nu se poate ca dou controale de pe aceeai form s aib aceeai valoare TabIndex. Dac este True, utilizatorul poate apsa Tab pentru a muta evidenierea pe acest check box. Dac este fals, acest check box nu poate fi evideniat. Nu se folosete de ctre Visual Basic. Aceasta este destinat programatorului pentru identificarea unui comentariu aplicat la check box. Arat starea respectivului check box. Poate lua valorile: Falseneselectat (default) sau True-selectat. Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i

Font Underline ForeColor Height (nlime) Cursor (Cursorul de Mouse)

Name (Numele) TabIndex

TabStop

Tag

Checked Visible

(Vizibil) Width (Limea)

deci poate folosi sau nu) respectivul check box. Numrul de twips pe care i ocup respectivul check box n lime.

Tabelul urmtor prezint evenimentele disponibile pentru controalele check box. La fel ca n cazul butoanelor de opiuni, Click este procedura cea mai des folosit. Tabelul 2. Evenimentele controlului Ceck Box Descriere Apare cnd utilizatorul efectueaz click pe check box. Apare cnd operaiunea drag a unui check box se ncheie. Apare n timpul unei operaiuni drag. Apare cnd utilizatorul apas o tast, att timp ct proprietatea Previzualizare Tast are valoarea Adevrat pentru controalele check box; altfel, controlul primete evenimentul KeyDown. Apare cnd utilizatorul apas o tast peste check box. Apare cnd utilizatorul elibereaz o tast.

Eveniment Click DragDrop DragOver KeyDown

KeyPress KeyUp

3.4.2. Butonul de opiune (RadioButton) Butoanele de opiune pun la dispoziia utilizatorului un set de opiuni, dintre care acesta are posibilitatea s marcheze una singur la un moment dat. Selectarea unui buton implic automat deselectarea celorlalte. Eticheta implicit afiat pe buton poate fi schimbat atribuind proprietii Text valoarea dorit, adic textul care reprezint opiunea asociat butonului respectiv. Butonul de opiune care este marcat are proprietatea Checked = True, iar celelalte butoane din grup au proprietatea Checked = False. De asemenea, de cte ori utilizatorul marcheaz sau demarcheaz un buton de opiune se declaneaz evenimentul click al controlului, care ncepe execuia procedurii aferent acestui eveniment. n aceast procedur putem scrie cod care s verifice starea butonului i, n funcie de aceasta, s execute o anumit funcie. Un buton de opiune poate fi dezactivat atribuind proprietii Enable valoarea False. Dac este dezactivat, butonul de opiune apare n timpul execuiei estompat. Exerciiu: Modificai forma de mai jos, astfel nct n locul butoanelor de comand s afiai butoane de opiune, corespunztoare celor dou funcii ale aplicaiei: suma a dou numere sau concatenarea a dou iruri.

Rezolvare:

Executnd aplicaia se obine:

Procedura asociat evenimentului clic al butonului Calculeaz este acum:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If RadioButton1.Checked = True Then TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text) ElseIf RadioButton2.Checked = True Then TextBox3.Text = TextBox1.Text + TextBox2.Text End If End Sub

Celelate dou proceduri au rmas neschimbate:


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub

Observaie: Pentru a fi mai riguroi ar trebui ca n procedura asociat butonului Reset (Button2_Click()) s iniializm i butoanele de opiune, deci s adugm comenzile: RadioButton1.Checked=False RadioButton2.Checked=False Prezentm n continuare principalele proprieti i evenimente ale controlului Option Button: Tabelul 1 Proprietile controlului Option Button Proprietaze BackColor (Culoarea de fundal) Descriere Culoarea de fundal a butonului de opiune. Numrul su hexadecimal reprezint una din mulimea de valori posibile de culoare din Windows. Putei selecta dintr-o palet de culori afiat de Visual Basic cnd dorii s stabilii aceast proprietate. Culoarea prestabilit (default) este aceeai cu cea a formei. Textul care apare pe un buton de opiune. Dac precedai orice caracter din text cu un &, acel caracter se va comporta ca tasta de acces a butonului de opiuni. Dac este setat True (default), butonul de opiuni poate rspunde la evenimente. Altfel, Visual Basic oprete procesarea evenimentelor pentru controlul respectiv. Adevrat (default), n cazul n care textul din Text este afiat n caractere bold. Altel, Fals. Adevrat (default), n cazul n care textul din Text este afiat n caractere italice. Altel, Fals. Numele stilului folosit pentru textul butonului de opiuni. n mod normal, vei folosi numele unui font TrueType din Windows. Mrimea, n puncte, a fontului folosit pentru textul butonului de opiuni. Adevrat (default), n cazul n care textul butonului este afiat n caractere strikethrough (caracterele au o linie peste ele).

Text

Enabled (Activat) Font Bold Font Italic FontName

FontSize (Mrime font) Font Strikethrough

Altel, Fals. Font Underline ForeColor Height Cursor (Cursorul de Mouse) Name (Numele) TabIndex Adevrat (default), n cazul n care textul butonului este afiat n caractere subliniate. Altel, Fals. Codul hexadecimal de culoare al culorii textului asociat butonului de opiuni. nlimea, n twips, a unui buton de opiuni. Forma pe care o ia cursorul atunci cnd utilizatorul mic mouse-ul peste butonul de opiuni. Reprezint o gam de forme diferite pe care le poate lua cursorul. Numele controlului. Default, Visual Basic genereaz numele Option1, Option2 i aa mai departe, pe msur ce adugai mai multe opiuni la form. Ordinea numerotrii controalelor ncepe de la 0 i crete de fiecare dat cnd adugai un nou control. Putei schimba ordinea evidenierii schimbnd TabIndex la alte valori. Nu se poate ca dou controale de pe aceeai form s aib aceeai valoare TabIndex. Dac este True, utilizatorul poate apsa Tab pentru a muta evidenierea pe acest buton de opiuni. Dac este fals, acest buton nu poate fi evideniat. Nu se folosete de ctre Visual Basic. Aceasta este destinat programatorului pentru identificarea unui comentariu aplicat la butonul de opiuni. True sau False (default), indic faptul c butonul de opiuni este selectat sau nu. True sau False, arat dac utilizatorul poate vedea sau nu (i deci poate folosi sau nu) butonul de opiuni. Numrul de twips pe care i ocup butonul de opiuni n lime.

TabStop

Tag

Checked (Valoarea) Visible (Vizibil) Width (Limea)

Tabelul 2 conine o list de evenimente ale butonului de opiuni care determin proceduri pe care le putei scrie. n general, procedura Click este cel mai des folosit pentru ca aplicaia s execute o anumit aciune atunci cnd utilizatorul selecteaz un anumit buton de opiuni. Tabelul 2. Evenimentele controlului Option Button Descriere Apare cnd utilizatorul efectueaz click pe butonul de opiuni. Apare cnd operaiunea draga unui buton de opiuni se ncheie. Apare n timpul unei operaiuni drag. Apare cnd utilizatorul apas o tast, att timp ct proprietatea Previzualizare Tast are valoarea Adevrat pentru controalele de pe butonul de opiuni; altfel, controlul primete evenimentul KeyDown.

Eveniment Click DragDrop DragOver KeyDown

KeyPress KeyUp

Apare cnd utilizatorul apas o tast peste butonul de opiuni. Apare cnd utilizatorul elibereaz o tast.

3.5. CASETA CU LIST (LISTBOX) Caseta cu list este un control care permite afiarea pe vertical a unei serii de articole din care utilizatorul poate alege unul sau mai multe. Dac numrul de articole depete capacitatea de afiare a casetei cu list proiectat, atunci ei i se vor asocia automat ba re de derulare vertical, respectiv orizontal. Observaie: Barele de derulare asociate automat casetelor cu text nu reprezint acelai lucru cu controalele de tip bare de derulare, care pot fi introduse separat pentru a controla introducerea datelor. n mod implicit articolele sunt afiate pe o singur coloan. Acest lucru poate fi schimbat prin modificarea proprietii MultiColumn. Valorile ce pot fi atribuite proprietii Multicolumn au urmtoarele semnificaii: False - caseta de tip list are o singur coloan, cu derulare pe vertical; True caset de tip list multicoloan cu derulare pe orizontal. Dac dorim ca utilizatorul s poat selecta mai multe articole din list, atunci trebuie stabilit corespunztor valoarea proprietii SelectionMode. Astfel, din lista de valori pus la dispoziie de proprietatea SelectionMode vom selecta valorile funcie de semnificaia lor, astfel: - None nu permite nici o selecie; - One permite selecie multipl simpl; cu un clic mouse simplu sau prin acionarea tastei Space se selecteaz sau se deselecteaz elementele suplimentare din list; - MultiSimple permite selecia multipl. - MultiExtended - permite selecie multipl extins. Aceasta nseamn practic c pentru a selecta mai multe articole din list putem proceda astfel: - Selectm primul articol, apoi innd tasta CTRL apsat, selectm pe rnd cu clic mouse fiecare dintre articolele dorite. - Dac articolele care trebuie selectate urmeaz unele dup altele, atunci selectm primul articol i apoi cu tasta SHIFT apsat, selectm cu clic mouse ultimul articol dorit. Toate articolele cuprinse ntre primul i ultimul articol selectat din list vor fi selectate. Proprietatea Items.Count a unei liste returneaz numrul de articole din list. Proprietatea SelectedIndex este utilizat pentru a determina numrul articolului selectat. Numerotarea articolelor n list ncepe de la 0. Pentru a prelucra selecia se utilizeaz n special evenimentele Click sau DoubleClick ale casetei cu list. Adugarea unui articol nou n list se face cu metoda Items.Add, care are sintaxa: Nume caset. Items.Add element[,index] unde: - nume caset este numele obiectului tip list (implicit este List1, List2, etc); - element este irul de caractere care trebuie adugat n list i care poate fi specificat ca atare, ntre sau coninut ntr-o variabil, al crei nume trebuie precizat;

index precizeaz poziia din list unde va fi inserat noul articol. Dac lipsete, articolul va fi adugat la sfrit. Dac index = 0, articolul va fi adugat la nceputul listei. Dac are o anumit valoare, articolul se va aduga la poziia respectiv. Metoda Items.Add permite adugarea de articole n list fie n timpul proiectrii, prin atribuirea de valori proprietii Items, fie n timpul execuiei aplicaiei, prin intermediul procedurilor apelate ca rspuns la aciunile utilizatorului. Astfel, la nceput articolele se vor nscrie la proprietatea Items, n lista pus la dispoziie. Pentru a trece la un nou articol se apas tastele CTRL/ENTER. Elementele din list pot fi apoi ordonate, sortate, caz n care proprietatea Sorted trebuie s ia valoarea True. n acest caz ns nu mai avem voie s folosim metoda Items.Add cu index, pentru a controla noi poziia n care se adaug articolul n list. Accesul la un articol din list se face prin proprietatea Items, al crei format este: Nume caset.Items (index) unde: Nume caset este numele casetei (implicit este List1, List2, etc). Index reprezint poziia articolului n list (primul are numrul de ordine 0). Items.Remove este metoda care permite tergerea unui articol din list, avnd formatul general: Nume caset.Items.RemoveAt( index) Pentru tergerea tuturor articolelor din list se utilizeaz metoda Items.Clear, cu formatul: Nume caset.Items.Clear Exerciiul 1: S se realizeze o aplicaie care s conin o caset cu list (denumit automat List1). S se afieze (ntr-un control tip etichet marcat n cadrul formei noastre) numrul articolului selectat de utilizator. Rezolvare: Proiectm forma Form1, pe care definim: - un control etichet, care s precizeze mesajul adresat utilizatorului, de a selecta produsul dorit din list; - un control tip list, n care nscriem iniial la proprietatea List cteva articole; - un alt control etichet, care s afieze poziia articolului selectat

Executnd aplicaia noastr se obine:

Procedura asociat evenimentului Click asociat listei este:


Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged Label3.Text = ListBox1.SelectedIndex End Sub

Exerciiul 2: Completai aplicaia anterioar astfel nct s permit adugarea de noi articole n list, precum i tergerea unora dintre ele.

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add("Mere") End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Remove(ListBox1.SelectedItem) ListBox1.Refresh() End Sub Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged Label3.Text = ListBox1.SelectedIndex End Sub

Not: Ori de cte ori se va executa, aplicaia noastr va aduga n list numai articolul mere, ceea ce nu este normal . Exerciiul 3: Modificai aplicaia de mai sus astfel nct de data aceasta procedura de adugare a unui produs nou n list s se fac prin introducerea datelor de la tastatur. Procedura va fi acum :
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim sir As String sir = InputBox("Introduceti noul produs") ListBox1.Items.Add(sir) End Sub

Am utilizat de date aceasta comanda de introducere a datelor de la tastatur InputBox i am atribuit valoarea citit unei variabile sir care a fost anterior declarat (Public sir As String) n
seciunea General Declaration.

Prezentm n continuare principalele proprieti, evenimente i metode ale controlului List Box: Tabel 1. Proprietile controlului List Box Proprietate BackColor (Culoarea de fundal) Descriere Culoarea de fundal a list box. Numrul su hexadecimal reprezint una din mulimea de valori posibile de culoare din Windows. Putei selecta dintr-o palet de culori afiat de Visual Basic cnd dorii s stabilii proprietatea Culoarea de fundal. Culoarea prestabilit (default) este aceeai cu cea a formei. Poate lua valoarea False - caseta de tip list are o singur coloan, cu derulare pe vertical sau True caset de tip list multicoloan cu derulare pe orizontal. Dac este setat pe valoarea logic True (default), controlul ListBox poate rspunde la evenimente. Altfel, Visual Basic oprete procesarea evenimentelor pentru controlul respectiv. Adevrat (default), dac valorile din list sunt afiate cu caractere bold. Altfel, Fals. Adevrat (default), dac valorile din list sunt afiate n caractere italice. Altfel, Fals. Numele stilului de text folosit n text box. n mod normal, vei folosi

MultiColumn (Coloanele)

Enabled (Activat) Font Bold Font Italic Font Name

numele unui font TrueType din Windows. Font Size Mrimea, n puncte, a fontului folosit pentru valorile din list box. Font Strikethrough Adevrat (default), dac valorile din list sunt afiate n caractere sttrikethrough (caracterele au o linie peste ele). Altel, Fals. Font Underline ForeColor Height (nlimea) Items Cursor (Cursorul de Mouse) SelectionMode (MultiSelecia) Adevrat (default), dac valorile din list sunt afiate n caractere subliniate. Altel, Fals. Culoarea valorilor din interiorul text box. nlimea controlului list box. Se poate preciza sau se definete automat, funcie de nlimea aleas pentru controlul list box. Permite introducerea elementelor din list la momentul iniial. Cu Ctrl/Enter se trece la un rnd nou din list. Forma pe care o ia cursorul atunci cnd utilizatorul mic mouse-ul peste controlul list box. Reprezint o gam de forme diferite pe care le poate lua cursorul. Poate lua valorile: None nu permite nici o selecie; One permite selecie multipl simpl; cu un clic mouse simplu sau prin acionarea tastei Space se selecteaz sau se deselecteaz elementele suplimentare din list; MultiSimple permite selecia multipl sau MultiExtended - permite selecie multipl extins. Numele controlului. Default, Visual Basic genereaz numele List1, List2 i aa mai departe, pe msur ce adugai mai multe controale list box. Dac are valoarea Fals (default), valorile apar n aceeai ordine n care programul le-a adugat pe list. Dac este True (Adevrat), Visual Basic nu afieaz valorile din list box ordonate numeric sau alfabetic. Ordinea numerotrii controalelor List Box ncepe de la 0 i crete de fiecare dat cnd adugai un nou control de acelai tip. Putei schimba ordinea evidenierii schimbnd TabIndex la alte valori. Nu se poate ca dou controale de pe aceeai form s aib aceeai valoare TabIndex (dou List1 de exemplu). Dac are valoarea True utilizatorul poate apsa Tab pentru a muta cursorul pe acest list box. Dac este fals, acest list box nu poate fi activat cu Tab. Nu se folosete de ctre Visual Basic. Aceasta este destinat programatorului pentru identificarea unui comentariu aplicat la controlul list box. Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i deci folosi) controlul list box. Numrul de twips pe care le ocup controlul list box n lime.

Name (Numele) Sorted (Sortare)

TabIndex

TabStop

Tag

Visible (Vizibil) Width (Limea) Observaie:

Cnd plasm un control ListBox pe o form, decidem ct de nalt dorim s fie acel list box prin redimensionarea controlului la mrimea care se potrivete cel mai bine. Este important s ne reamintim c dac nu toate valorile ncap n ListBox, Visual Basic adaug bare de scroll la caseta tip list, pe care utilizatorul le poate folosi pentru a vedea toate valorile. Tabelul 2 prezint cele mai multe evenimente pe care le accept controlul ListBox i pe care le putem utiliza n programe. Tabelul 2 Evenimentele controlului List Box Element Click Double Click DragDrop Drag Over KeyDown Descriere Apare cnd utilizatorul efectueaz click pe controlul list box. Apare cnd utilizatorul efectueaz dublu-click pe controlul list box. Apare cnd operaiunea drag (de tragere) a controlului list box se ncheie. Apare n timpul unei operaiuni drag. Apare cnd utilizatorul apas o tast, att timp ct proprietatea Previzualizare Tast are valoarea Adevrat pentru controalele de pe form; altfel, forma primete cazul KeyDown. Apare cnd utilizatorul apas o tast peste list box. Apare cnd utilizatorul elibereaz o tast pe list box. Apare cnd utilizatorul apas butonul de mouse peste un list box. Apare cnd utilizatorul mic mouse-ul peste list box. Apare cnd utilizatorul elibereaz butonul de mouse peste un list box.

KeyPress KeyUp MouseDown MouseMove MouseUp

Tabelul 3 conine o serie de metode ale controlului listbox necesare pentru a iniializa, analiza i elimina elementele unui control list box, deci pentru a le prelucra. Metodele funcioneaz ca programe (proceduri) care opereaz pe controale. Tabelul 11.3 Metodele controlului List Box Numele Metodei Items.Add (Adaug element) Items.Clear (terge) SelectedIndex Items.Count (Numr elemente list) Items.Remove Descriere Adaug un singur element la list box. terge toate elementele din list Are ca valoare numrul articolului selectat n cadrul list box . Are ca valoare numrul total de elemente dintr-un list box.

terge un singur element din list.

(terge element) SelectedItem (Selectat) Arat dac utilizatorul a selectat un anumit element din list box. Dac are valoarea True elementul e selectat.

3.6. CASETA COMBINAT (COMBOBOX) Caseta combinat este un control care combin caracteristicile controlului caset cu list cu cele ale controlului caset de text. Dac utilizatorul nu dorete s selecteze nici una din opiunile din list poate s adauge una n poriunea casetei de text a controlului. Proprietatea Text controleaz selecia articolelor din lista ComboBox. Aceasta nseamn c aici vom gsi coninutul articolului selectat la un moment dat. Observaie: Articolul selectat din lista ComboBox la un moment dat se nscrie automat n proprietatea Text. Exerciiu: S se realizeze o aplicaie care s afieze o list de produse, utilizatorul avnd posibilitatea selectrii unei poziii. Produsul astfel selectat s fie transferat ntr-o list (ListBox) i afiat pentru control ntr-o caset de tip text (TextBox). Proiectm forma i apoi scriem codul. Lista iniial de produse o definim ca un ComboBox. La acionarea butonului de comand EXECUTA articolul selectat din Lista de produse va fi transferat n caseta de tip list din dreapta i afiat n caseta de text.

Forma proiectat

Execuia aplicaiei

Codul corespunztor celor dou butoane de comand este:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(ComboBox1.Text) TextBox1.Text = ComboBox1.Text End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub

Prezentm n continuare principalele proprieti i evenimente ale controlului ComboBox: Tabelul 11.4 Proprietile casetei combinate (ComboBox)) Descriere Culoarea de fundal a casetei combo. Numrul su hexadecimal reprezint una din mulimea de valori posibile de culoare din Windows. Putei selecta dintr-o palet de culori afiat de Visual Basic cnd dorii s stabilii aceast proprietate. Culoarea prestabilit (default) este aceeai cu cea a formei. Dac este setat pe True (default), controlul casetei combo poate rspunde la evenimente. Altfel, Visual Basic oprete procesarea evenimentelor pentru controlul respectiv. True (default), dac valorile combo sunt afiate n caractere bold. Altel, Fals. True (default), dac valorile combo sunt afiate n caractere italice. Altel, Fals.

Proprietate Back Color (Culoarea de fundal)

Enabled (Activat) Font Bold Font Italic

Font Name Numele stilului de text folosit n caseta combo. n mod normal, vei (Numele fontului) folosi numele unui font TrueType din Windows. Font Size (Mrime font) Mrimea, n puncte, a caracterelor folosite pentru valorile din caseta combo.

Font Strikethrough True(default), dac valorile combo sunt afiate n caractere strikethrough (caracterele au o linie peste ele). Altel, Fals. Font underline True (default), dac valorile din caseta combo sunt afiate n caractere

(Font Subliniat) ForeColor Height (nlimea) Cursor (Cursorul de mouse) Name (Numele) Sorted (Sortare) TabIndex

subliniate. Altel, Fals. Culoarea valorilor din interiorul casetei combo. nlimea unui control de tip caset combo. Forma pe care o ia cursorul atunci cnd utilizatorul mic mouse-ul peste controlul casetei combo. Reprezint o gam de forme diferite pe care le poate lua cursorul. Numele controlului. Default, Visual Basic genereaz numele Combo1, Combo2 i aa mai departe, pe msur ce adugai mai multe controale la form Dac este Fals (default), valorile din list apar n aceeai ordine n care programul le-a adugat. Dac este True Visual Basic afieaz valorile din caseta combo ordonate numeric sau alfabetic. Ordinea de numerotare a controalelor de pe o form ncepe de la 0 i crete de fiecare dat cnd adugai un nou control. Putei schimba ordinea evidenierii schimbnd TabIndex la alte valori. Nu se poate ca dou controale de pe aceeai form s aib aceeai valoare TabIndex. Dac este True, utilizatorul poate apsa Tab pentru a muta evidenierea pe aceast caset combo. Dac este fals, aceast caset nu poate fi activat cu Tab. Nu se folosete de ctre Visual Basic. Aceasta este destinat programatorului pentru identificarea unui comentariu aplicat la controlul casetei combo. Valoarea iniial pe care utilizatorul o vede n caseta combo. Ulterior aici se depune valoarea selectat. Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i deci poate folosi sau nu) controlul respectiv. Numrul de twips pe care le ocup controlul casetei combo n lime.

TabStop

Tag

Text Visible (Vizibil) Width (Limea)

Not: Observai c nu exist proprietatea Selecie Multipl la caseta combo, ca n cazul controlului List box. Utilizatorul poate selecta doar un singur element din list la un moment dat. Tabelul 2 conine o serie de evenimente ale casetei combinate pentru care putei scrie proceduri echivalente atunci cnd programul trebuie s reacioneze la manipularea unei casete combo de ctre utilizator. Tabelul 2. Evenimentele controlului caset combinat (ComboBox) Eveniment Click DragDrop Descriere Apare cnd utilizatorul efectueaz click pe controlul casetei combo. Apare cnd operaiunea drag a unei casete combo se ncheie.

DragOver KeyDown

Apare n timpul unei operaiuni drag. Apare cnd utilizatorul apas o tast, att timp ct proprietatea Previzualizare Tast are valoarea True pentru controalele de pe form; altfel, forma primete evenimentul KeyDown. Apare cnd utilizatorul apas o tast peste caseta combo. Apare cnd utilizatorul elibereaz o tast pe caseta combo.

KeyPress KeyUp

Observaie: Controalele casetei combo susin aceleai metode ca i controalele list box. Prin urmare, putei aduga, elimina, numra i selecta elementele din caseta combo, dac aplicai metodele din tabelul prezentat la controlul ListBox.

3.7. CASETA CU POZE (PICTUREBOX) Este un control utilizat pentru a pentru a afia poze i imagini grafice. Poza care se afieaz este stabilit de proprietatea Image care utilizeaz ca valoare numele fiierului care conine poza (opional se poate specifica i calea). n timpul execuiei programului, pentru a afia o poz sau pentru a o schimba se folosete funcia Load pentru a stabili proprietatea Image. PictureBox1.Load(Poza.gif) Dac poza care va fi afiat nu are aceeai dimensiune cu ceea a controlului, se poate seta proprietatea SizeMode=AutoSize i astfel controlul va avea aceleai dimensiuni cu poza. Atenie ns, cci redimensionarea controlului nu va ine cont de celelalte elemente de interfa, putnd s le acopere. Caseta cu poz poate fi folosit i drept container pentru alte controale. De exemplu, plasnd n caseta de poze controale imagine care s se comporte ca butoane, aceasta se poate transforma n bar de instrumente sau introducnd controale etichet care s afieze text aceasta se poate transforma n bar de stare. Exerciiu: S se realizeze o aplicaie ce afieaz o caset cu poze care s apar sau s dispar n timpul execuie aplicaiei, la cererea utilizatorului. Aplicaia trebuie s permit comutarea ntre dou imagini ce se vor afia.

Am proiectat formularul, am ncrcat iniial o poz n caseta cu poze i am prevzut cele 3

butoane necesare.Executnd aplicaia i acionnd apoi butoanele de comand aflate la dispoziia noastr se obine:

Acionnd butonul ncarc alta se ncarc n caseta cu poze cealalt imagine. Dac se mai acioneaz odat, se va ncrca din nou prima imagine. Prin urmare, acest buton funcioneaz ca un comutator.

Procedurile scrise n acest caz sunt:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If PictureBox1.Visible = True Then PictureBox1.Visible = False Else : PictureBox1.Visible = True PictureBox1.Load() End If End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

If comut = 0 Then PictureBox1.ImageLocation = "C:\Users\Public\Pictures\Sample Pictures\Hydrangeas.jpg" comut = 1 Else : PictureBox1.ImageLocation = "C:\Users\Public\Pictures\Sample Pictures\Tulips.jpg" comut = 0 End If End Sub

3.8. CASETE DE DIALOG PREDEFINITE Un mod simplu de a aduga o caset de dialog aplicaiei noastre este s folosim casetele de dialog predefinite, deoarece n acest caz nu trebuie s ne preocupm de designul, ncrcarea i afiarea casetei. Pentru aceasta Visual Basic ne pune la dispoziie dou funcii: - InputBox care afieaz o caset de dialog ce permite preluarea datelor de la utilizator; - MsgBox care permite afiarea diferitelor informaii, mesaje. a). Funcia InputBox afieaz o caset de dialog modal care cere utilizatorului s introduc date. Funcia returneaz o valoare de tip String format din caracterele introduse de utilizator n caseta cu text din fereastra de dialog atunci cnd utilizatorul apas butonul OK; dac se apas butonul Cancel irul returnat este irul vid . Sintaxa: InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context]) unde: - prompt este un ir de caractere afiat ca mesaj n caseta de dialog. Numrul maxim de caractere este de 1024; - title este un ir de caractere care va fi afiat ca titlu n bara de titlu a casetei de dialog; - default este un ir de caractere ce va fi afiat n caseta cu text i care va fi returnat de funcie n caz c utilizatorul nu introduce alte date; - xpos, ypos expresii numerice care specific coordonatele colului stnga sus al casetei de dialog fa de colul stnga sus al ecranului; - helpfile un ir de caractere ce specific numele fiierului Help ce va fi folosit pentru a oferi asisten n lucrul cu caseta de dialog; Exemplu: S se introduc de la tastatur datele despre salariaii unei firme i s se adauge ntr -o caset tip list.

Am

proiectat

formularul

apoi

am

lansat

execuie

aplicaia:

Acionnd butonul ADAUGA apare caseta de dialog care permite introducerea datelor, sub forma:

Datele introduse de la tastatur se vor atribui, pe rnd, elementelor din list. Pentru aceasta e necesar un contor (i, de tip ntreg) care va fi incrementat (crescut) cu 1 pentru fiecare nou citire de la tastatur. Contorul va controla astfel poziia articolului adugat n list (List1.list(i)). Ca efect numele persoanelor introduse de la tastatur se regsesc n caseta tip list, astfel:

Procedurile asociate celor dou butoane sunt:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ListBox1.Items.Add(InputBox("dati numele:")) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub

b). Funcia MsgBox se poate utiliza pentru a obine rspunsuri de tipul Da / Nu de la utilizatori sau pentru a afia diferite mesaje de avertizare, erori, atenionri. Dup citirea mesajului utilizatorul va apsa un buton pentru a nchide fereastra. Funcia returneaz un numr de tip Integer care precizeaz ce buton a fost apsat. Sintaxa funciei: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) unde: - prompt este un ir de caractere afiat ca mesaj n caseta de dialog. Numrul maxim de caractere este de 1024; - buttons este o expresie numeric ce reprezint suma valorilor care specific numrul i tipul butoanelor afiate, iconia. - title un ir de caractere ce va fi afiat ca titlu n bara de titlu a casetei de dialog; - helpfile - un ir de caractere ce specific numele fiierului Help ce va fi folosit pentru a oferi asisten n lucrul cu caseta de dialog. Exemplu: n formularul de mai sus s se avertizeze, printr-un mesaj corespunztor, introducerea unei noi persoane n list. Efectul execuiei aplicaiei este:

Codul procedurii este:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click MsgBox("Se va adauga o noua persoana...") ListBox1.Items.Add(InputBox("Dati numele:")) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub

n legtur cu posibilitile de afiare ale funciei MsgBox facem urmtoarele precizri:

Tabelul 1. Valorile tipului funciei MsgBox Valoare 0 1 2 3 4 5 16 32 48 64 0 256 512 4096 Valoare CONSTANT.TXT MB_OK MB_OKCANCEL MB_ABORTRETRYIGNORE MB_YESNOCANCEL MB_YESNO MB_RETRYCANCEL MB_ICONSTOP MB_ICONQUESTION MB_ICONEXCLAMATION MB_ICONINFORMATION MB_DEFBUTTON1 MB_DEFBUTTON2 MB_DEFBUTTON3 MB_SYSTEMMODAL Descriere Butonul OK apare doar n caseta de mesaj Apar butoanele OK i Cancel Apar butoanele Abort, Retry i Cancel Apar butoanele Yes, No i Cancel Apar butoanele Yes i No Apar butoanele Retry i Cancel Afieaz iconia cu semnul stop Afieaz iconia cu semnul ntrebrii Afieaz iconia cu semnul exclamrii Afieaz iconia cu semnul de informaii Primul buton este evideniat Al doilea buton este evideniat iniial Al treilea buton este evideniat iniial Aplicaia utilizatorului este modal, ceea ce nseamn c fereastra de mesaj trebuie rezolvat nainte de a trece la alt program Windows

Tabelul 3. Valorile redate ale butonului de comand al funciei MsgBox() Valoare 1 2 3 4 5 6 7 Valoare CONSTANT.TXT IDOK IDCANCEL IDABORT IDRETRY IDIGNORE IDYES IDNO Descriere Utilizatorul a apsat butonul OK Utilizatorul a apsat butonul Cancel Utilizatorul a apsat butonul Abort Utilizatorul a apsat butonul Retry Utilizatorul a apsat butonul Ignore Utilizatorul a apsat butonul Yes Utilizatorul a apsat butonul No

3.9. EDITAREA DE MENIURI Orice program Windows care ndeplinete mai multe funcii pune la dispoziia utilizatorului un meniu prin care prezint aceste funcii. Principala caracteristic a aplicaiilor Windows o constituie faptul c permit realizarea unei interfee plcute, comode, uor de utilizat. Acest lucru se realizeaz prin proiectarea unui meniu de comenzi corespunztor. Meniul conine principalele comenzi pe care utilizatorul le poate utiliza n cadrul aplicaiei. Un meniu

bun va face aplicaia uor de folosit. Un meniu mai puin bine conceput va ncurca adeseori utilizatorul, care nu va nelege bine cum funcioneaz programul respectiv. O posibilitate de a realiza meniuri uor accesibile o constituie prezentarea funciunilor aplicaiei prin butoane de comand, butoane de opiuni sau casete de validare, care permit i controleaz succesiunea formularelor n cadrul proiectului (aa cum am vzut la aplicaiile realizate pn acum). Microsoft a ncercat s impun o tradiie n modul de proiectare a meniurilor. Majoritatea barelor de meniuri din aplicaiile Windows conin meniuri ca: File, Edit, View, Window sau Help. De aceea se recomand, dac este posibil, ca meniurile aplicaiilor noastre s se asemene ct mai mult cu meniurile ntlnite la majoritatea aplicaiilor Windows. n acest fel utilizatori aplicaiei se vor familiariza foarte repede cu ea. n acest sens, mediul de programare Visual Basic pune la dispoziia programatorilor un editor de meniuri cu ajutorul cruia se pot crea meniuri orict de complexe ntr-un mod relativ simplu. Trebuie s stabilim ns cu mult atenie proprietile fiecrui element care va forma meniul. Apelarea editorului se face folosind Toolbox-ul i de acolo opiunea Menus & Toolbars i se selecteaz obiectul Menu Strip. Exerciiu: S se proiecteze un meniu care s pun la dispoziia utilizatorului opiuni pentru toate problemele rezolvate de noi pn acum. Rezolvare: S presupunem c acestea pot fi grupate n 4 grupe mari de funciuni i anume: Calcule (aritmetice sau pentru expresii), Imagini (una sau mai multe), iruri (concatenare sau cutare) i Ieire.

Formular proiectat

Formular executat

3.10. STRUCTURI DE CONTROL n cadrul oricrui algoritm de rezolvare a unei probleme se pot identifica diferite structuri de control.

n cadrul programelor, structurile de control sunt formate din instruciuni. Acestea descriu practic partea algoritmic a unui program. Ele pot fi prefixate de etichete pentru a putea fi referite n instruciunea de salt necondiionat Goto. Structura liniar Structura liniar poate conine o succesiune de instruciuni de tipul: - instruciunea de atribuire - instruciunea de apel procedur. Instruciunea cea mai important i cea mai frecvent a limbajului este instruciunea de atribuire, avnd forma: variabil = expresie sau Set variabil = obiect sau Nume_de_funcie = expresie Instruciunea specific faptul c unei variabile sau unei funcii (cea din stnga semnului = ) i este atribuit o nou valoare, care este specificat printr-o expresie sau printr-un obiect. O expresie este o construcie prin care se reprezint o formul pentru calculul valorii unui obiect oarecare. O expresie const dintr-o secven format din operanzi (variabile, constante, etc.) i operatori (simboluri operaionale). Instruciunea de apel procedur specific activarea (apelul) procedurii al crui nume apare n instruciune i are forma: nume_de_procedur list_parametri_actuali sau Call nume_de_procedur(list_parametri_actuali) Structura alternativ Structura alternativ este descris cu ajutorul instruciunilor If Then, If Then Else i Select Case. Visual Basic ofer o alternativ la instruciunea If ThenElse ce permite executarea unui bloc de instruciuni dintre mai multe n cazul n care este ndeplinit o anumit condiie i anume instruciunea Select Case. Structura repetitiv Aceast structur permite repetarea n anumite condiii a unei instruciuni sau a unei secvene de instruciuni. Visual Basic suport dou tipuri de structuri repetitive: structuri repetitive cu contor descrise de instruciunile For Next i ForEachNext care execut acelai lucru de un numr stabilit de ori i structuri repetitive cu condiie descrise de diferitele variante ale instruciunii DoLoop ce ndeplinesc aceeai sarcin atta timp ct o condiie exist sau pn cnd nu mai exist o condiie. Exemplu: Do While i<=9 MsgBox Este repetarea numrului: + str(i) Loop

3.11. PROBLEME REZOLVATE 1. S se realizeze o aplicaie care s permit afiarea produselor din dou nomenclatoare, fiecare n cte o list. La apsarea unui buton de comand elementele selectate din prima list s se mute n cea de-a doua list. La apsarea unui alt buton de comand toate elementele din prima list s se mute n cea de-a doua list. Alte dou butoane s permit apoi aceleai operaii din lista2 n lista1. Rezolvare:

n casetele de tip Text de sub cele dou liste dorim s afim, atunci cnd se face un clic mouse n interiorul unei liste, numrul de elemente din lista respectiv. Codul aferent procedurilor scrise se prezint astfel:
Public Class Form1 Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' Dim b As Integer If ListBox1.Items.Count > 0 Then 'b = ListBox1.SelectedIndex For i = 0 To ListBox1.Items.Count - 1 If ListBox1.GetSelected(i) = True Then Me.ListBox2.Items.Add(Me.ListBox1.Items.Item(i)) End If Next i 'Me.ListBox1.Items.RemoveAt(b) End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If ListBox1.Items.Count > 0 Then ListBox2.Items.Clear() For i = 0 To ListBox1.Items.Count - 1 Me.ListBox2.Items.Add(Me.ListBox1.Items.Item(i)) Next i End If End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'Dim c As Integer If ListBox2.Items.Count > 0 Then 'c = ListBox2.SelectedIndex For i = 0 To ListBox2.Items.Count - 1 If ListBox2.GetSelected(i) = True Then Me.ListBox1.Items.Add(Me.ListBox2.Items.Item(i)) End If Next i ' Me.ListBox2.Items.RemoveAt(c) End If End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click If ListBox2.Items.Count > 0 Then ListBox1.Items.Clear() For i = 0 To ListBox2.Items.Count - 1 Me.ListBox1.Items.Add(Me.ListBox2.Items.Item(i)) Next i End If End Sub Private Sub ListBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.Click TextBox1.Text = ListBox1.Items.Count End Sub Private Sub ListBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox2.Click TextBox2.Text = ListBox2.Items.Count End Sub End Class

2. S se realizeze un minicalculator care s aib formatul de mai jos. Se cere ca n dreptul primelor dou ecrane s scrie A, respectiv B iar la ultimul operaia efectuat: A+b, A-B, A*B, A/B dup cum a fost acionat butonul de +,-, * sau /. Rezultatul va fi afiat n ultima caset de text.

Formatul cerut

Rezolvare:

Se proiecteaz forma, se nscriu pe butoanele de comand operatorii aritmetici prin intermediul proprietii Text, se adaug apoi dou butoane: Reset i Exit pentru cele dou funcii obligatorii n orice aplicaie. n partea stng vom defini trei etichete, dintre care primele dou cu un text fixat iniial tot prin Text, i a treia etichet cu valoarea proprietii Text controlat prin program, pentru a corespunde operatorului cerut.

Executnd aplicaia se obine:

Se observ c la mprire se verific mai nti dac mpritorul este diferit de 0 i, dac nu este, se afieaz un mesaj de eroare. Procedurile asociate butoanelor de comand se prezint astfel:
Public Class Form1 Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button6.Click End End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox3.Text = Str(Val(TextBox1.Text) + Val(TextBox2.Text)) Label4.Text = "A+B" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click TextBox3.Text = Str(Val(TextBox1.Text) - Val(TextBox2.Text)) Label4.Text = "A-B" End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click TextBox3.Text = Str(Val(TextBox1.Text) * Val(TextBox2.Text)) Label4.Text = "A*B" End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Label4.Text = "A/B" If Val(TextBox2.Text) <> 0 Then TextBox3.Text = Str(Val(TextBox1.Text) / Val(TextBox2.Text)) Else TextBox3.Text = "EROARE" End If End Sub Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" Label4.Text = " " End Sub End Class

3. S se realizeze un alt calculator simplu, n care operaiile de calcul s corespund unor butoane de opiuni (butoane radio).

Rezolvare:

Codul surs aferent procedurilor va fi n acest caz:


Public Class Form1 Dim n As Double Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click On Error Resume Next If RadioButton1.Checked = True Then TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text) ElseIf RadioButton2.Checked = True Then TextBox3.Text = Val(TextBox1.Text) - Val(TextBox2.Text) ElseIf RadioButton3.Checked = True Then TextBox3.Text = Val(TextBox1.Text) * Val(TextBox2.Text) ElseIf RadioButton4.Checked = True Then If TextBox2.Text = "0" Then MsgBox("Nu se poate imparti la 0", vbCritical, "Eroare") TextBox2.Text = "" Else TextBox3.Text = Val(TextBox1.Text) / Val(TextBox2.Text) End If ElseIf RadioButton5.Checked = True Then TextBox2.Text = "0" TextBox2.Enabled = False If Val(TextBox1.Text) < 0 Then MsgBox("Nu se poate extrage radical de ordin 2 din numere negative", vbCritical, "Eroare") Else n = Val(TextBox1.Text) TextBox3.Text = System.Math.Sqrt(n) End If End If TextBox2.Enabled = True End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load TextBox1.Text = "0" TextBox2.Text = "0" TextBox3.Text = "0" End Sub Private Sub RadioButton5_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton5.CheckedChanged TextBox2.Enabled = False End Sub End Class

4. S se proiecteze i s se realizeze efectiv un mic calculator de buzunar, care s conin un

ecran (TextBox) pentru afiarea operanzilor i apoi al rezultatului obinut. Calculatorul are prevzute taste pentru tastarea cifrelor care compun operanzii i taste corespunztoare operatorilor aritmetici, precum i semnului = . Primul operand se termin atunci cnd se apas pe tasta corespunztoare unui operator (i trebuie reinut ntr-o variabil de memorie). Al doilea operand se termin atunci cnd se apas pe tasta =. Se cere s se afieze rezultatul obinut i apoi s se adauge ntr-o list (ListBox) ntreaga operaie efectuat. Calculatorul trebuie s permit apoi reluarea altei operaii dorite.

Sugestie: Toate cifrele de la 0 la 9, precum i operatorii aritmetici vor avea cte un buton de comand corespunztor. Pentru afiarea cifrelor tastate prin apsarea butoanelor calculatorului, vom ine seama de faptul c irul din caseta de tip text se termin la apsarea unei taste de operaie. Pentru fiecare tast de cifr n procedura asociat vom avea o instruciune de forma: Text1.text= Text1.text+1 pentru cifra 1, etc. Pentru adugarea n list vom realiza o concatenare a operanzilor cu operatorii i cu rezultatul, vom depune irul astfel obinut ntr-o variabil de tip ir de caractere i apoi vom aduga n list coninutul acestei variabile.
5. S se proiecteze i s se realizeze o aplicaie care s permit analiza unui text introdus de la tastatur, afiarea primului cuvnt i apoi la cerere a urmtoarelor cuvinte din text. S se afieze deasemenea numrul de caractere din text.

Rezolvare:

Public Class Form1 Dim cuv As String Dim lung As Integer Dim i1 As Integer Dim i As Integer Dim a As Integer Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click LTrim(Me.TextBox1.Text) Text = Me.TextBox1.Text lung = Len(Text) Me.TextBox3.Text = Len(Text) a = InStr(Text, " ") i = 1 cuv = Mid(Text, i, a) Me.TextBox2.Text = cuv i = a End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = InStr(Text, " ") If i < lung - a Then a = InStr(Mid(Text, i + 1, lung - i), " ") cuv = Mid(Text, i, a) Me.TextBox2.Text = cuv Me.Refresh() i = i + a Else cuv = Mid(Text, i, a) Me.TextBox2.Text = cuv Me.Refresh() End If End Sub End Class

6. S se realizeze un editor de texte, care s permit introducerea unui text de la tastatur i apoi salvarea lui pe disc prin intermediul unei ferestre de dialog. Editorul trebuie s permit i deschiderea unui fiier existent n vederea editrii.

Rezolvare: Am proiectat 3 forme astfel:

n urma execuiei se obine:

Codul surs aferent primei forme:


Imports System Imports System.IO Public Class Form1 Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click End End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click TextBox1.Text = "" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Form2.Show() Form2.TextBox1.Text = "" Form2.TextBox2.Text = "" On Error Resume Next Me.Hide() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Form3.Show() Me.Hide() End Sub End Class

Codul surs aferent formei a II-a:

Imports System Imports System.IO Public Class Form2 Private Sub DriveListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DriveListBox1.SelectedIndexChanged Try DirListBox1.Path = DriveListBox1.Drive Catch End Try TextBox1.Text = DirListBox1.Text End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Form1.Show() Me.Hide() End Sub Private Sub DirListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DirListBox1.SelectedIndexChanged Try FileListBox1.Path = DirListBox1.Path Catch End Try TextBox2.Text = Me.TextBox2.Text & Me.DirListBox1.SelectedItem & "\" End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.TextBox1.Text = Me.TextBox1.Text & Me.TextBox2.Text & Me.FileListBox1.SelectedItem Try Using fisier As StreamReader = New StreamReader(Me.TextBox1.Text) Dim linie As String Do linie = fisier.ReadLine() Form1.TextBox1.Text = Form1.TextBox1.Text & linie Loop Until linie Is Nothing fisier.Close() End Using Catch End Try Form1.Show() Me.Hide() End Sub Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox2.Text = "" TextBox1.Text = "" Me.DirListBox1.Refresh() Me.FileListBox1.Refresh() Me.DriveListBox1.Refresh() End Sub

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged FileListBox1.Pattern = Me.ComboBox1.Text End Sub End Class

Codul aferent formei a treia se prezint astfel:


Imports System Imports System.IO Public Class Form3 Private Sub DriveListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DriveListBox1.SelectedIndexChanged Try DirListBox1.Path = DriveListBox1.Drive Catch End Try TextBox2.Text = DirListBox1.Text End Sub Private Sub DirListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DirListBox1.SelectedIndexChanged Try FileListBox1.Path = DirListBox1.Path Catch End Try TextBox3.Text = Me.TextBox3.Text & Me.DirListBox1.SelectedItem & "\" End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged FileListBox1.Pattern = Me.ComboBox1.Text End Sub Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Form1.Show() Me.Hide() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Focus() If TextBox1.Text = "" Then MessageBox.Show("Nu ati introdus numele fisierului!!!", "Atentie", MessageBoxButtons.OK, MessageBoxIcon.Warning) Else

TextBox4.Text = Me.TextBox2.Text & TextBox3.Text & TextBox1.Text Using fisier As StreamWriter = New StreamWriter(TextBox4.Text) fisier.WriteLine(Form1.TextBox1.Text) fisier.WriteLine(DateTime.Now) fisier.Close() MessageBox.Show("Fisierul a fost salvat in " & Me.TextBox4.Text, "Save", MessageBoxButtons.OK, MessageBoxIcon.Question) End Using End If End Sub End Class

7. S se proiecteze i s se realizeze o aplicaie care s ne pun la dispoziie un ceas de alarm.

Rezolvare: Am proiectat dou formulare, astfel: Form1 este formularul n care este afiat ora sistemului i conine 2 butoane Alarm i Exit, un label (care afieaz ora exact) i un textbox ascuns. Form2 este activat la actionarea butonului Alarm i conine 2 textboxuri n care se introduc ora, respectiv minutele la care alarma este activat, trei label-uri i un buton de Ok.

n urma execuiei se obine:

Public Class Form1 Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long Dim x Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click On Error Resume Next Form2.Show() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Timer1.Enabled = True Timer1.Interval = 1000 End Sub Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Label1.Text = TimeOfDay End Sub Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer2.Tick If Label1.Text = TextBox1.Text Then x = mciExecute("play c:/woody2.mp3") MsgBox("Alarma", vbInformation, "Alarma") End If End Sub End Class

Codul asociat formei a doua se prezint astfel:


Public Class Form2 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load On Error Resume Next End Sub Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click On Error Resume Next

Form1.TextBox1.Text = Me.TextBox1.Text + ":" + Me.TextBox2.Text + ":00 PM" Form1.Timer2.Enabled = True Form1.Timer2.Interval = 1000 If TextBox1.Text > 24 Or TextBox1.Text < 0 Then MsgBox("Introduceti o valoare intre 0 si 24", vbExclamation, "Ora Incorecta !!!") TextBox1.Text = "" ElseIf TextBox2.Text > 59 Or TextBox2.Text < 0 Then MsgBox("Introduceti o valoare intre 0 si 59", vbExclamation, "Minute Incorecte !!!") TextBox2.Text = "" End If Me.Hide() End Sub End Class

8. S se realizeze o mic aplicaie de calcul a salariilor cuvenite tiind c se dau: - salariul de ncadrare; - sporul de vechime, de noapte, de toxicitate; - eventuale prime; Din total ctig se scad: impozitul datorat, eventuale penaliti i eventualele chirii care trebuie introduse de la tastatur pentru cei la care este cazul. Rezolvare: Am proiectat formele astfel nct unele date (Nume, prenume, salariu) se introduc prin intermediul unor casete de text, iar altele (chirii, rate) prin intermediul unor comenzi InputBox. Utilizatorul va preciza prin intermediul unor casete de validare (bifate) elementele de salariu specifice fiecrui salariat.

Toate opiunile bifate pentru salariat vor genera mai nti un dialog cu utilizatorul pentru a cere datele respective (exemplu: sporul de vechime, funcia,etc) i apoi calculele necesare prin intermediul procedurilor asociate acestor casete de validare.

Butonul Urmtorul calcul iniializeaz elementele formularului pentru a trece la un alt salariat. Codul surs aferent este:
Public Class Form1 Dim NUME As String Dim PRENUME As String Dim SALARIU As Long Dim FUNCTIA As String Dim VEC As Integer Dim PRIME As Single Dim SPORV As Single 'SPOR DE VECHIME Dim SPORT As Single 'SPOR DE TOXICITATE Dim SPORN As Single 'SPOR DE NOAPTE Dim PEN As Single 'PENALIZARI Dim SALB As Single 'SALARIU BRUT Dim IMPOZIT As Single Dim CHIRII As Single Dim RESTP As Single 'SUMA FINALA Sub CALCUL() SALB = SALARIU + SPORV + SPORN + SPORT + PRIME RESTP = SALB - IMPOZIT - CHIRII - PEN TextBox4.Text = Format(RESTP, "FIXED") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" TextBox4.Text = "" CheckBox1.Checked = 0 CheckBox2.Checked = 0

CheckBox3.Checked CheckBox4.Checked CheckBox5.Checked CheckBox6.Checked CheckBox7.Checked FUNCTIA = 0 VEC = 0 SPORV = 0 SPORT = 0 SPORN = 0 PRIME = 0 CHIRII = 0 SALB = 0 IMPOZIT = 0 PEN = 0 RESTP = 0 End Sub

= = = = =

0 0 0 0 0

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged SALARIU = Val(TextBox3.Text) CALCUL() End Sub Private Sub CheckBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.Click If CheckBox1.Checked Then FUNCTIA = InputBox("FUNCTIA") If UCase(FUNCTIA) = "DIRIGINTE" Then PRIME = SALARIU * 3 / 100 ElseIf UCase(FUNCTIA) = "DIRECTOR" Then PRIME = SALARIU * 4 / 100 Else PRIME = 100000 End If Else PRIME = 0 End If CALCUL() End Sub Private Sub CheckBox2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox2.Click If CheckBox2.Checked Then VEC = InputBox("VECHIME") If VEC < 3 Then SPORV = 0 ElseIf VEC < 7 Then SPORV = SALARIU * 3 / 100 ElseIf VEC < 15 Then SPORV = SALARIU * 5 / 100 ElseIf VEC < 20 Then SPORV = SALARIU * 7 / 100 ElseIf VEC = 0 Then SPORV = SALARIU ElseIf VEC > 20 Then

SPORV = SALARIU * 20 / 100 End If Else SPORV = 0 End If CALCUL() End Sub Private Sub CheckBox3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox3.Click If CheckBox3.Checked Then SPORT = 350000 'CONSTANT Else SPORT = 0 End If CALCUL() End Sub Private Sub CheckBox4_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox4.Click If CheckBox4.Checked Then SPORN = 300000 'CONSTANT Else SPORN = 0 End If CALCUL() End Sub Private Sub CheckBox5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox5.Click If CheckBox5.Checked Then PEN = 15000 'SUMA CONSTANTA PENTRU ORICE ABATERE Else PEN = 0 End If CALCUL() End Sub Private Sub CheckBox6_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox6.Click If CheckBox6.Checked Then SALB = SALARIU + SPORV + SPORT + SPORN + PRIME If SALB < 606000 Then IMPOZIT = SALB * 19 / 100 ElseIf SALB < 1300000 Then IMPOZIT = 127000 + (SALB - 606000) * 21 / 100 Else IMPOZIT = 320000 + (SALB - 130000) * 25 / 100 End If Else IMPOZIT = 0 End If CALCUL() End Sub Private Sub CheckBox7_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox7.Click If CheckBox7.Checked Then CHIRII = InputBox("CHIRII") Else CHIRII = 0

End If CALCUL() End Sub End Class

9. S se realizeze un program care s calculeze maximul i minimul pentru liniile i coloanele unei matrici ce se va introduce de la tastatur.

Se cere de la tastatur numrul de linii i apoi, n mod asemntor, numrul de coloane. Prin intermediul unei ferestre de dialog urmeaz precizarea valorii tuturor elementelor matricei noastre. La sfrit se calculeaz i se afieaz rezultatele obinute.

Codul surs aferent se prezint astfel:


Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim a(0 To 100, 0 To 100) Dim i, j, n, m As Integer Dim maxL(0 To 100), maxC(0 To 100) As Integer

Dim maxLi, maxCi As Integer Dim minL(0 To 100), minC(0 To 100) As Integer Dim minLi, minCi As Integer Dim pauza As String pauza = Chr(13) & Chr(10) Label1.Text = "" Label2.Text = "" n = InputBox("Introduceti numarul liniilor", "N=") m = InputBox("introduceti numarul coloanelor", "M=") For i = 1 To n For j = 1 To m a(i, j) = InputBox("A (" & i & "," & j & ") =") Label3.Text = Label3.Text & a(i, j) & " " Next j Label3.Text = Label3.Text & pauza Next i For i = 1 To n maxLi = a(i, 1) For j = 2 To m If maxLi < a(i, j) Then maxLi = a(i, j) End If Next j maxL(i) = maxLi Next i For j = 1 To m maxCi = a(1, j) For i = 2 To n If maxCi < a(i, j) Then maxCi = a(i, j) End If Next i maxC(j) = maxCi Next j For i = 1 To n minLi = a(i, 1) For j = 2 To m If minLi > a(i, j) Then minLi = a(i, j) End If Next j minL(i) = minLi Next i For j = 1 To m minCi = a(1, j) For i = 2 To n If minCi > a(i, j) Then minCi = a(i, j) End If Next i minC(j) = minCi Next j Label3.Text = Label3.Text & pauza For i = 1 To n Label3.Text = Label3.Text & "Maximul de pe Linia " & i & " este " & maxL(i) & pauza Next i Label3.Text = Label3.Text & pauza For j = 1 To m Label3.Text = Label3.Text & "Maximul de pe Coloana " & j & " este " & maxC(j) & pauza

Next j Label3.Text = Label3.Text & pauza For i = 1 To n Label3.Text = Label3.Text & "Minimul de pe Linia " & i & " este " & minL(i) & pauza Next i Label3.Text = Label3.Text & pauza For j = 1 To m Label3.Text = Label3.Text & "Minimul de pe Coloana " & j & " este " & minC(j) & pauza Next j End Sub End Class

10. S se realizeze o mic aplicaie care s analizeze, ntr-un text dat, tipul caracterelor: majuscule sau caractere mici. Rezolvare: Textul se va introduce n caseta de text i rezultatul se va afia chiar pe formular. Am realizat dou proceduri de tip funcie, care stabilesc, pentru fiecare liter n parte, dac este majuscul sau nu, testnd codul ASCII al acestora. Se tie c pentru majuscule codul Ascii are valori cuprinse ntre 65 i 90, iar pentru literele mici n tre 97 i 122. Executnd aplicaia noastr se obine:

Codul surs se prezint astfel:


Public Class Form1 Public Function IsUpper(ByVal CheckLetter As String) As Boolean IsUpper = True If Asc(CheckLetter) < 65 Or Asc(CheckLetter) > 90 Then IsUpper = False End If End Function

Public Function IsLower(ByVal CheckLetter As String) As Boolean IsLower = True If Asc(CheckLetter) < 97 Or Asc(CheckLetter) > 122 Then IsLower = False End If End Function Public Sub Main() Console.WriteLine(IsUpper("A")) Console.WriteLine(IsUpper("a")) Console.WriteLine(IsLower("A")) Console.WriteLine(IsLower("a")) Console.ReadLine() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x As String Dim y As Integer Dim g As Boolean Dim enter As String x = TextBox1.Text y = Len(x) enter = Chr(13) & Chr(10) For i = 1 To y g = IsUpper(Mid(x, i, 1)) If g = "True" Then Label2.Text = Label2.Text & "Caracterul " & i & " este MAJUSCULA" & enter Else Label2.Text = Label2.Text & "Caracterul " & i & " este litera mica " & enter End If Next i End Sub End Class

11. S se realizeze un program care s preia nota obinut la examenul de admintere i, funcie de aceasta, s comunice candidatului dac a intrat i, n acest caz, la ce facultate. Rezolvare: Stabilim o gril de medii de admitere la diversele faculti.

Codul sursa este urmatorul: Public Class Form1 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Nota Nota = TextBox1.Text Select Case Nota Case Is >= 9.5 Label3.Text = " Felicitari! " & vbCrLf & "Ati intrat la INFORMATICA." Case Is >= 8.5 Label3.Text = " Felicitari! " & vbCrLf & "Ati intrat la Litere" Case Is >= 7.5 Label3.Text = " Felicitari! " & vbCrLf & "Ati intrat la Matematica/Fizica" Case Is >= 5 Label3.Text = " Felicitari! " & vbCrLf & "Ati intrat la METALURGIE" Case Is <= 5 Label3.Text = " NE pare rau" & vbCrLf & "Ati PICAT" End Select End Sub End Class

12. S se proiecteze i s se realizeze o aplicaie care s rezolve o ecuaie de gradul II dat de la tastatur.

Public Class Form1 Dim A As Integer Dim B As Integer Dim C As Integer Dim Delta As Double Dim X1 As Double Dim X2 As Double Dim d As Double Dim d2 As Double Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click A = TextBox1.Text B = TextBox2.Text C = TextBox3.Text If A <> "0" Then Delta = B * B - 4 * A * C If Delta < 0 Then d = Delta * -1 d2 = System.Math.Sqrt(d) X1 = -B & " +i " & d2 & " / " & 2 * A X2 = -B & " -i " & d2 & " / " & 2 * A Label6.Text = X1 Label7.Text = X2 TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" Else X1 = (-B + System.Math.Sqrt(Delta)) / 2 * A X2 = (-B - System.Math.Sqrt(Delta)) / 2 * A Label6.Text = X1

Label7.Text = X2 TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" End If Else MsgBox("Functia nu este de gradul II") TextBox1.Text = "" TextBox2.Text = "" TextBox3.Text = "" End If End Sub End Class 13. S se realizeze un program care s permit schimbul unei sume n lei ntr-o valut din lista afiat.

Codul surs: Public Class Form1 Dim curs As Double Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End End Sub Private Sub RadioButton1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton1.CheckedChanged curs = InputBox("Introduceti cursul valutar pentru USD:") TextBox2.Text = CStr(Format(Val(TextBox1.Text) / curs, "FIXED")) + " USD" End Sub Private Sub RadioButton2_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton2.CheckedChanged curs = InputBox("Introduceti cursul valutar pentru EURO:")

TextBox3.Text = CStr(Format(Val(TextBox1.Text) / curs, "FIXED")) + " EURO" End Sub Private Sub RadioButton4_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton4.CheckedChanged curs = InputBox("Introduceti cursul valutar pentru CHF:") TextBox5.Text = CStr(Format(Val(TextBox1.Text) / curs, "FIXED")) + " CHF" End Sub Private Sub RadioButton3_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton3.CheckedChanged curs = InputBox("Introduceti cursul valutar pentru YE:") TextBox4.Text = CStr(Format(Val(TextBox1.Text) / curs, "FIXED")) + " YE" End Sub End Class

14. S se realizeze o aplicaie care s calculeze penalitile pentru valoarea unor facturi, funcie de numrul zilelor de ntrziere la plata facturii. Calculul penalitilor se face dup urmtorul algoritm: Penalizri (%) 0 5 10 20 ntrziere (zile) 30 (30,45) [45,60) 60

15. Dezvoltai aplicaia anterioar, astfel nct pe prima form s afiai textul APLICAIE PENTRU CALCUL PENALITI i s permitei intrarea sau ieirea din aplicaie prin intermediul a 2 butoane de comand: Start i Exit. Ca efect al acionrii butonului de Start s apar o a doua form, la care s cerei parola de acces. Permitei cel mult trei ncercri ale parolei, dup care blocai accesul la aplicaie, permind doar acionarea butonului Exit. Dac parola a fost corect, permitei accesul la forma a treia, care cere datele i calculeaz penalitile cerute.

16. S se realizeze o aplicaie care s afieze pe ecran un ceas cu limbi (ore, minute, secunde) care merge (limbile se mic pentru a arta ora exact). Rezolvare: Executnd aplicaia se obine:

Codul surs al procedurilor asociate se prezint astfel:


Imports System.Drawing Imports System.Math Public Class Form1 Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code " Public Sub New() MyBase.New() InitializeComponent() End Sub Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub Private components As System.ComponentModel.IContainer Friend WithEvents Timer1 As System.Windows.Forms.Timer <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container Me.Timer1 = New System.Windows.Forms.Timer(Me.components) Me.SuspendLayout() 'Timer1 Me.Timer1.Interval = 10 'Form1 Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(344, 302) Me.MaximizeBox = False Me.MaximumSize = New System.Drawing.Size(352, 336) Me.MinimizeBox = False Me.MinimumSize = New System.Drawing.Size(352, 336) Me.Name = "Form1" Me.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide Me.StartPosition = System.Windows.Forms.FormStartPosition.Manual Me.Text = "Animation clock" Me.ResumeLayout(False) End Sub #End Region Dim bm As Bitmap Dim g As Graphics Dim PI As Double = 3.14159 Dim XC, YC, X, Y, R, Secundac As Integer Dim unghi, AspectRatio As Double Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load bm = New Bitmap(Me.ClientSize.Width, Me.ClientSize.Height) g = Graphics.FromImage(bm) 'aflu coordonatele centrului formularului XC = Me.ClientSize.Width / 2 YC = Me.ClientSize.Height / 2 AspectRatio = Me.ClientSize.Height / Me.ClientSize.Width Draw_Graphics() Me.BackgroundImage = bm 'variabila Secunda retine secunda curenta Secundac = Now.Second End Sub

Private Sub Draw_Graphics() 'aceasta procedura <<deseneaza>> pe rand elementele componente ale ceasului Draw_Clock_Face() Draw_Clock_Markers() Draw_Clock_Hands() End Sub Private Sub Draw_Clock_Hands() 'trasez limbile ceasului, prima data cea pentru ore, apoi pentru minute si in final cea pentru secunde Dim ora1, SS As Double ' variabile care incrementeaza secundele si minutele Dim ora, MIN, SEC As Integer 'variabile care pastreaza ora, minutul si secunda curente Dim MyBrush As New System.Drawing.SolidBrush(Color.FromArgb(64, 69, 69, 69)) 'setez limbile transparent Dim fp(5) As Point 'fiecare brat are 5 puncte. Se salveaza aceste puncte intr-un vector in the point array ora1 = (2 * PI) / 12 'formula pentru pasul de incrementare pentru ora SS = (2 * PI) / 60 MIN = Now.Minute 'variabila MIN retine minutul curent SEC = Now.Second 'variabila SEC pastreaza secunda curenta 'desenez limba ceasului care imi indica ora If Mid(Now.ToLongTimeString, Now.ToLongTimeString.Length - 2, 2).ToUpper.Trim = "PM" Then 'daca data sistemului este returnata cu PM adaugam 12 altfel o lasam asa ora = Now.Hour + 12 Else ora = Now.Hour End If If Me.ClientSize.Width > Me.ClientSize.Height Then 'setam unghiul care va determina ce tip de brat este R = (Me.ClientSize.Height / 2) - 35 Else R = (Me.ClientSize.Width / 2) - 35 End If unghi = ora * ora1 - (3.2 * ora1) 'variabila unghi retine unghiul de miscare si se calculeaza astfel: ' unghi = ora * ora1 - (3.2 * ora1) ' unghi = ora * ora1 - (2.8 * ora1) ' unghi = ora * ora1 - (3 * ora1) ' punctul de incepere al cercului este pozitia orei 3 X = Cos(unghi) * (R - 20) 'valoarea lui X pentru punctul din stanga Y = (Sin(unghi) * (R - 20)) * AspectRatio ' valoarea lui Y pentru punctul din stanga fp(0) = New Point(XC, YC) fp(1) = New Point(XC + X, YC + Y) unghi = ora * ora1 - (2.8 * ora1) X = Cos(unghi) * (R - 20) Y = (Sin(unghi) * (R - 20)) * AspectRatio fp(3) = New Point(XC + X, YC + Y) unghi = ora * ora1 - (3 * ora1) X = Cos(unghi) * R Y = (Sin(unghi) * R) * AspectRatio fp(2) = New Point(XC + X, YC + Y) fp(4) = fp(0)

g.FillPolygon(MyBrush, fp) g.DrawLine(Pens.Black, fp(0), fp(1)) g.DrawLine(Pens.Black, fp(1), fp(2)) g.DrawLine(Pens.Black, fp(2), fp(3)) g.DrawLine(Pens.Black, fp(3), fp(4)) 'desenarea minutarului unghi = MIN * SS - (16 * SS) X = Cos(unghi) * (R - 40) Y = (Sin(unghi) * (R - 40)) * AspectRatio fp(0) = New Point(XC, YC) fp(1) = New Point(XC + X, YC + Y) unghi = MIN * SS - (14 * SS) X = Cos(unghi) * (R - 40) Y = (Sin(unghi) * (R - 40)) * AspectRatio fp(3) = New Point(XC + X, YC + Y) unghi = MIN * SS - (15 * SS) X = Cos(unghi) * (R - 30) Y = (Sin(unghi) * (R - 30)) * AspectRatio fp(2) = New Point(XC + X, YC + Y) fp(4) = fp(0) g.FillPolygon(MyBrush, fp) g.DrawLine(Pens.Black, fp(0), fp(1)) g.DrawLine(Pens.Black, fp(1), fp(2)) g.DrawLine(Pens.Black, fp(2), fp(3)) g.DrawLine(Pens.Black, fp(3), fp(4)) 'secundarul unghi = SEC * SS - (15 * SS) X = Cos(unghi) * R Y = (Sin(unghi) * R) * AspectRatio fp(0) = New Point(XC, YC) fp(1) = New Point(XC + X, YC + Y) g.DrawLine(Pens.Black, fp(0), fp(1)) Array.Clear(fp, 0, fp.GetUpperBound(0)) fp = Nothing MyBrush.Dispose() MyBrush = Nothing End Sub Private Sub Draw_Clock_Markers() Dim index As Integer If Me.ClientSize.Width > Me.ClientSize.Height R = (Me.ClientSize.Height / 2) - 25 Else R = (Me.ClientSize.Width / 2) - 25 End If index = 0 For unghi = 0 To 2 * PI Step (2 * PI) / 60 X = Cos(unghi) * R Y = (Sin(unghi) * R) * AspectRatio If index / 5 = Int(index / 5) Then g.FillEllipse(Brushes.Firebrick, XC + 10, 10) g.DrawEllipse(Pens.Black, XC + X - 5, Else g.FillEllipse(Brushes.Firebrick, XC + 4) g.DrawEllipse(Pens.Black, XC + X - 2, End If index += 1 Next

Then

X - 5, YC + Y - 5, YC + Y - 5, 10, 10) X - 2, YC + Y - 2, 4, YC + Y - 2, 4, 4)

g.FillEllipse(Brushes.Black, XC - 5, YC - 5, 10, 10) index = Nothing End Sub Private Sub Draw_Clock_Face() Dim gp As New Drawing2D.GraphicsPath Dim fp(1) As Point Dim index As Integer If Me.ClientSize.Width > Me.ClientSize.Height Then R = (Me.ClientSize.Height / 2) - 15 Else R = (Me.ClientSize.Width / 2) - 15 End If index = 1 For unghi = 0 To 2 * PI Step 0.1 X = Cos(unghi) * R Y = (Sin(unghi) * R) * AspectRatio If X <> 0 And Y <> 0 Then If index - 1 > fp.GetUpperBound(0) Then ReDim Preserve fp(index) End If fp(index - 1) = New System.Drawing.Point(XC + X, YC + Y) index += 1 End If Next gp.AddCurve(fp) gp.CloseFigure() g.FillPath(Brushes.GhostWhite, gp) g.DrawPath(Pens.Black, gp) Array.Clear(fp, 0, fp.GetUpperBound(0)) fp = Nothing gp.Dispose() gp = Nothing index = Nothing End Sub Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing bm.Dispose() g.Dispose() bm = Nothing g = Nothing PI = Nothing XC = Nothing YC = Nothing X = Nothing Y = Nothing R = Nothing unghi = Nothing Secundac = Nothing AspectRatio = Nothing End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick If Secundac <> Now.Second Then Secundac = Now.Second Draw_Graphics() Me.BackgroundImage = bm Me.Refresh() End If

End Sub Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Activated If Timer1.Enabled = False Then Timer1.Enabled = True End Sub End Class

17. S se proiecteze i s se realizeze efectiv o interfa gen Windows Explorer pentru

vizualizarea structurii de foldere i fiiere i unitile de disc disponibile. Un dublu click pe un fiier l va deschide cu aplicaia asociat (va lansa n execuie un fiier executabil sau va deschide pentru lucru un fiier sub Word, Excel etc). Sugestie de rezolvare:

Codul sursa al programului este urmatorul:


Imports ExpTreeLib Imports ExpTreeLib.CShItem Imports ExpTreeLib.SystemImageListManager Imports System.IO Imports System.Text Imports System.Text.RegularExpressions Imports System.Threading #Const Ver = 2005 Public Class frmDragDrop Inherits System.Windows.Forms.Form Dim testTime As New DateTime(1, 1, 1, 0, 0, 0)

Private LastSelectedCSI As CShItem Friend WithEvents txtDropOn As System.Windows.Forms.TextBox Friend WithEvents mnuChangeRoot As System.Windows.Forms.MenuItem Friend WithEvents mnuRefreshTree As System.Windows.Forms.MenuItem Friend WithEvents mnuSetToDesktop As System.Windows.Forms.MenuItem Friend WithEvents mnuExit As System.Windows.Forms.MenuItem Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem Friend WithEvents mnuViewLargeIcons As System.Windows.Forms.MenuItem Friend WithEvents mnuViewSmallIcons As System.Windows.Forms.MenuItem Friend WithEvents mnuViewList As System.Windows.Forms.MenuItem Friend WithEvents mnuViewDetails As System.Windows.Forms.MenuItem Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu Private Shared Event1 As New ManualResetEvent(True) #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() InitializeComponent() SystemImageListManager.SetListViewImageList(lv1, False, False) SystemImageListManager.SetListViewImageList(lv1, True, False) #If Ver = 2005 Then Control.CheckForIllegalCrossThreadCalls = False #End If End Sub Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub Private components As System.ComponentModel.IContainer Friend WithEvents Panel1 As System.Windows.Forms.Panel Friend WithEvents ExpTree1 As ExpTreeLib.ExpTree Friend WithEvents Splitter1 As System.Windows.Forms.Splitter Friend WithEvents Panel2 As System.Windows.Forms.Panel Friend WithEvents cmdExit As System.Windows.Forms.Button Friend WithEvents sbr1 As System.Windows.Forms.StatusBar Friend WithEvents lv1 As System.Windows.Forms.ListView Friend WithEvents ColumnHeaderName As System.Windows.Forms.ColumnHeader Friend WithEvents ColumnHeaderSize As System.Windows.Forms.ColumnHeader Friend WithEvents ColumnHeaderType As System.Windows.Forms.ColumnHeader Friend WithEvents ColumnHeaderModifyDate As System.Windows.Forms.ColumnHeader Friend WithEvents ColumnHeaderAttributes As System.Windows.Forms.ColumnHeader <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.SuspendLayout() ' 'frmDragDrop ' Me.ClientSize = New System.Drawing.Size(560, 363) Me.Name = "frmDragDrop" Me.ResumeLayout(False)

End Sub #End Region #Region "Form Exit Methods" Private Sub cmdExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExit.Click mnuExit_Click(sender, e) End Sub Private Sub mnuExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuExit.Click Me.Close() End Sub #End Region #Region "Form Load" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load #If Ver = 2005 Then Control.CheckForIllegalCrossThreadCalls = False #End If End Sub #End Region #Region " ExplorerTree Event Handling" Private Sub AfterNodeSelect(ByVal pathName As String, ByVal CSI As CShItem) Handles ExpTree1.ExpTreeNodeSelected Dim dirList As New ArrayList() Dim fileList As New ArrayList() Dim TotalItems As Integer LastSelectedCSI = CSI If CSI.DisplayName.Equals(CShItem.strMyComputer) Then dirList = CSI.GetDirectories Else dirList = CSI.GetDirectories fileList = CSI.GetFiles End If Event1.WaitOne() TotalItems = dirList.Count + fileList.Count If TotalItems > 0 Then Dim item As CShItem dirList.Sort() fileList.Sort() Me.Text = pathName sbr1.Text = pathName & " " & _ dirList.Count & " Directories " & fileList.Count & " Files" Dim combList As New ArrayList(TotalItems) combList.AddRange(dirList) combList.AddRange(fileList) lv1.BeginUpdate() lv1.Items.Clear() lv1.Refresh() For Each item In combList Dim lvi As New ListViewItem(item.DisplayName) With lvi If Not item.IsDisk And item.IsFileSystem Then Dim attr As FileAttributes attr = GetAttr(item.Path) Dim SB As New StringBuilder()

If (attr And FileAttributes.System) = FileAttributes.System Then SB.Append("S") If (attr And FileAttributes.Hidden) = FileAttributes.Hidden Then SB.Append("H") If (attr And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then SB.Append("R") If (attr And FileAttributes.Archive) = FileAttributes.Archive Then SB.Append("A") .SubItems.Add(SB.ToString) Else : .SubItems.Add("") End If If Not item.IsDisk And item.IsFileSystem And Not item.IsFolder Then If item.Length > 1024 Then .SubItems.Add(Format(item.Length / 1024, "#,### KB")) Else .SubItems.Add(Format(item.Length, "##0 Bytes")) End If Else .SubItems.Add("") End If .SubItems.Add(item.TypeName) If item.IsDisk Then .SubItems.Add("") Else If item.LastWriteTime = testTime Then .SubItems.Add("") Else .SubItems.Add(item.LastWriteTime) End If End If .Tag = item End With lv1.Items.Add(lvi) Next lv1.EndUpdate() LoadLV1Images() Else lv1.Items.Clear() sbr1.Text = pathName & " Has No Items" End If End Sub #End Region

#Region " IconIndex Loading Thread" Private Sub LoadLV1Images() Dim ts As New ThreadStart(AddressOf DoLoadLv) Dim ot As New Thread(ts) #If Ver = 2005 Then ot.SetApartmentState(ApartmentState.STA) #Else ot.ApartmentState = ApartmentState.STA #End If Event1.Reset() ot.Start() End Sub

Private Sub DoLoadLv() Dim lvi As ListViewItem For Each lvi In lv1.Items lvi.ImageIndex = SystemImageListManager.GetIconIndex(lvi.Tag, False) Next Event1.Set() End Sub #End Region #Region " Drag From Routines" Private Sub lv1_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles lv1.ItemDrag With lv1 If .SelectedItems.Count > 0 Then Dim toDrag As New ArrayList() Dim lvItem As ListViewItem Dim strD(.SelectedItems.Count - 1) As String Dim i As Integer For Each lvItem In .SelectedItems toDrag.Add(lvItem.Tag) strD(i) = CType(lvItem.Tag, CShItem).Path i += 1 Next Dim Dobj As New DataObject() Dim ms As MemoryStream ms = CProcDataObject.MakeShellIDArray(toDrag) With Dobj If Not ms Is Nothing Then .SetData("Shell IDList Array", True, ms) End If .SetData("FileDrop", True, strD) .SetData(toDrag) End With Dim dEff As DragDropEffects If e.Button = Windows.Forms.MouseButtons.Right Then dEff = DragDropEffects.Copy Or DragDropEffects.Move Or DragDropEffects.Link Else dEff = DragDropEffects.Copy Or DragDropEffects.Move End If Dim res As DragDropEffects = .DoDragDrop(Dobj, dEff) End If End With End Sub #End Region Private Sub lv1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles lv1.DoubleClick Dim csi As CShItem = lv1.SelectedItems(0).Tag If csi.IsFolder Then ExpTree1.ExpandANode(csi) Else Try Process.Start(csi.Path) Catch ex As Exception MsgBox(ex.Message, MsgBoxStyle.OkOnly, "Error in starting application") End Try End If

End Sub Private Sub txtDropOn_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles txtDropOn.DragEnter If e.Data.GetDataPresent("FileDrop", True) And _ ((e.AllowedEffect And DragDropEffects.Copy) = DragDropEffects.Copy) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub Private Sub txtDropOn_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles txtDropOn.DragDrop Dim fList() As String = e.Data.GetData("FileDrop", True) txtDropOn.Text = "" Dim S As String For Each S In fList txtDropOn.Text += S & vbCrLf Next e.Effect = DragDropEffects.None End Sub Private Sub SAY(ByVal S As String) txtDropOn.Text += S & vbCrLf Debug.WriteLine(S) End Sub Private Sub mnuRefreshTree_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuRefreshTree.Click ExpTree1.RefreshTree() End Sub Private Sub mnuChangeRoot_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuChangeRoot.Click ExpTree1.RootItem = ExpTree1.SelectedItem End Sub Private Sub mnuSetToDesktop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuSetToDesktop.Click ExpTree1.RootItem = CShItem.GetDeskTop End Sub #Region " Test Routines"

Private Sub mnuShowSpecial_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim eNames() As String = [Enum].GetNames(GetType(ExpTree.StartDir)) Dim eNums() As ShellDll.CSIDL = [Enum].GetValues(GetType(ExpTree.StartDir)) Dim CSI As CShItem Dim i As Integer For i = 0 To eNames.Length - 1 Debug.WriteLine("Getting Item for -- " & eNames(i)) Try CSI = New CShItem(eNums(i)) CSI.DebugDump() : CShItem.DumpPidl(CSI.PIDL) Catch ex As Exception Debug.WriteLine("Error on making new CShitem")

End Try Debug.WriteLine("") Next End Sub Private Sub mnuMakeDigest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim SR As New StreamReader("F:\DragNDropV4\LegalCSIDL.txt") Dim SW As New StreamWriter("F:\DragNDropV4\LegalCSIDLDigest.txt", False) Dim PidlOne As Boolean = False Do While SR.Peek <> -1 Dim inp As String = SR.ReadLine() Dim tInp As String = inp.Trim If tInp.Length > 0 Then If tInp.StartsWith("Getting") OrElse _ tInp.StartsWith("Error") OrElse _ tInp.StartsWith("DisplayName") OrElse _ tInp.StartsWith("Path") OrElse _ tInp.StartsWith("IsFileSystem") OrElse _ tInp.StartsWith("PIDL") OrElse _ tInp.StartsWith("TypeName") Then SW.WriteLine(inp) Debug.WriteLine(inp) PidlOne = False ElseIf tInp.StartsWith("ItemID #1") Then PidlOne = True SW.WriteLine(inp) Debug.WriteLine(inp) ElseIf tInp.StartsWith("ItemID") Then SW.WriteLine(inp) Debug.WriteLine(inp) PidlOne = False ElseIf PidlOne Then SW.WriteLine(inp) Debug.WriteLine(inp) End If End If Loop SR.Close() SW.Close() End Sub Private Sub mnuTestcPidl_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim CSI As CShItem = CShItem.GetDeskTop dumpCPidl(CSI) CSI = New CShItem(ShellDll.CSIDL.DESKTOPDIRECTORY) dumpCPidl(CSI) CSI = New CShItem("C:\Temp") dumpCPidl(CSI) CSI = New CShItem("F:\DragNDropV4\ClipSpy\src") dumpCPidl(CSI) CSI = New CShItem(ShellDll.CSIDL.NETHOOD) dumpCPidl(CSI) Dim b(14) As Byte b(0) = 43 Debug.WriteLine("An Invalid Pidl Tests" & IIf(IsValidPidl(b), " IsValid", " Is NOT Valid")) End Sub

Private Sub dumpCPidl(ByVal CSI As CShItem) Dim cp As cPidl = CSI.clsPidl Dim o() As Object = cp.Decompose Debug.WriteLine(CSI.DisplayName) DumpPidl(CSI.PIDL) Dim b() As Byte Dim i As Integer = 1 For Each b In o Debug.Write("cPidl Item #" & i & IIf(IsValidPidl(b), " IsValid", " Is NOT Valid")) DumpHex(b) i += 1 Next End Sub Private Sub mnuTestFindCShItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) ExpTreeLib.Tests.TestFindCShItem() End Sub Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Dim xxx As CShItem = GetCShItem("C:\") testJoinBytes(xxx) xxx = GetCShItem(CType(GetDeskTop.GetItems()(3), CShItem).Path) testJoinBytes(xxx) Dim yyy As CShItem = GetCShItem(ShellDll.CSIDL.APPDATA) xxx = CType(yyy.GetDirectories()(3), CShItem) testJoinBytes(xxx) End Sub Private Sub testJoinBytes(ByVal xxx As CShItem) Debug.WriteLine("Testing PIDL of -- " & xxx.DisplayName) DumpPidl(xxx.PIDL) Dim o() As Object = xxx.clsPidl.Decompose Dim R() As Byte = o(0) Debug.WriteLine("Joining Pidls, Step 0") DumpHex(R) Dim i As Integer For i = 1 To o.Length - 1 R = cPidl.JoinPidlBytes(R, o(i)) Debug.WriteLine("Joining Pidls, Step " & i) DumpHex(R) Next End Sub #End Region End Class

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