Sei sulla pagina 1di 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 I con
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 WindowStatestabilete 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 Resizeal 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 Hidesau 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 Descriere
BackColor Culoarea de fundal a formei. Putei selecta o culoare
Windows sau putei selecta dintr-o palet de culori
FormBorderStyle 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.
Text

Textul care apare n zona de titlu a formei. Textul default
este Numele formei (implicit Form1, Form2..).
ControlBox 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.
Enabled
(Activat)
Dac este setat True (defalt), forma poate rspunde la
evenimente. Altfel, Visual Basic oprete procesarea
evenimentelor pentru forma respectiv.
Fontul Bold 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.
Fontul Italic 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
Font Name
(Nume Font)
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
FontSize
(Mrime font)
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
Font Strikethrough 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
FontUnderline 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.
ForeColor Culoarea textului din prim plan pe care l afiai pe form
dac utilizai comanda Print.
Height
(nlimea)
nlimea formei n twips.
Icon Pictograma pe care utilizatorul o vede dup ce minimizeaz
(Iconia) forma.
KeyPreview Dac este Fals (default), controlul evideniat primete
urmtoarele evenimente: KeyDown, KeyUp, i KeyPress
naintea formei. Dac este True, forma primete
evenimentele naintea controlului.
MaximizeBox Dac este True (default), butonul de maximizare apare pe
form n timpul utilizrii. Dac este Fals, utilizatorul nu
poate maximiza fereastra formei.
MinimizeBox Dac este Adevrat (default), butonul de minimizare apare
pe form n timpul utilizrii. Dac este Fals, utilizatorul nu
poate minimiza fereastra formei.
Cursor 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.
Name
(Numele)
Numele formei. Default, Visual Basic genereaz numele
Form1.
BackgroundImage
(Imagine)
Un fiier imagine care va fi afiat pe fundalul formei.
Tag Nu se folosete de ctre Visual Basic. Aceasta este
destinat programatorului pentru identificarea unui
comentariu aplicat la form..
Visible
(Vizibil)
Adevarat sau fals, arat dac utilizatorul poate vedea sau nu
(i deci poate folosi sau nu) forma.
Width
(Limea)
Limea formei n twips.
WindowState 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.

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 Apare cnd utilizatorul efectueaz click pe form.
DoubleClick Apare cnd utilizatorul efectueaz dublu click pe
form.
Deactivate
(Dezactivare)
Are loc atunci cnd o alt form devine o fereastr
activ.
DragDrop Apare cnd operaiunea drag peste o form se
ncheie.
DragOver Apare n timpul unei operaiuni drag pe form.
KeyDown 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.
KeyPress Apare cnd utilizatorul apas o tast pe form..
KeyUp Apare cnd utilizatorul elibereaz o tast.
Load Apare cnd forma se ncarc i nainte ca ea s
apar pe ecran.
MouseDown Apare cnd utilizatorul apas butonul de mouse pe
form.
MouseMove Apare cnd utilizatorul mic mouse-ul peste form.
MouseUp Apare cnd utilizatorul elibereaz butonul de mouse
pe form.
Paint 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.
Resize Apare atunci cnd utilizatorul redimensioneaz
forma.

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 EXI T_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 Descriere
BackColor
(Culoarea de fundal)
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.
Text Textul care apare pe butonul de comand
DragIcon Iconia care apare atunci cnd utilizatorul folosete funcia
drag pentru un buton de comand pe o form.
Enabled
(Activat)
Dac este setat True (default), butonul de comand poate
rspunde la evenimente. Altfel, Visual Basic oprete
procesarea evenimentelor pentru controlul respectiv.
FontSize
(Mrime font)
Mrimea, n puncte, a fontului folosit pentru textul afiat pe
butonul de comand.
Font Strikethrough Adevrat (default), n cazul n care textul este afiat n
caractere strikethrough (caracterele au o linie peste ele).
Font Underline Adevrat (default), n cazul n care textul este afiat n
caractere subliniate.
Height
(nlimea)
nlimea, n twips, a unui buton de comand.
Cursor
(Cursorul de Mouse)
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.
Name
(Numele)
Numele controlului. n mod implicit, Visual Basic genereaz
numele Command1, Command2 i aa mai departe, pe msur
ce mai adugai butoane pe form.
TabIndex 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.
TabStop 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.
Tag Nu se folosete de ctre Visual Basic. Aceasta este destinat
programatorului pentru identificarea unui comentariu aplicat
la butonul de comand.
Top Numrul de twips de la marginea de sus a unui buton de
comand pn la marginea de sus a formei.
Visible
(Vizibil)
Adevarat sau fals, arat dac utilizatorul poate vedea sau nu
(i deci poate folosi sau nu) respectivul buton de comand.
Width
(Limea)
Numrul de twips pe care le ocup respectivul buton de
comand n lime.

Tabelul 2 Evenimentele butonului de comand
Eveniment Descriere
Click Apare cnd utilizatorul efectueaz click pe butonul de comand.
DragDrop Apare cnd operaiunea drag a butonului de comand se ncheie.
DragOver Apare n timpul unei operaiuni drag a butonului de comand.
KeyDown Apare cnd utilizatorul apas o tast, iar proprietatea
Previzualizare Tast are valoarea Fals pentru orice control de pe
form; altfel, forma primete evenimentul KeyDown
KeyPress Apare cnd utilizatorul apas o tast de acces la butonul de
comand.
KeyUp Apare cnd utilizatorul elibereaz o tast.

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 Descriere
AutoSize 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.
BackColor
(Culoarea de
fundal)
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.
BorderStyle 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.
Text Textul care apare ntr-o etichet.
Enabled
(Activat)
Dac este setat True (default) controlul etichetei poate rspunde la
evenimente. Altfel, Visual Basic oprete procesarea
evenimentelor pentru controlul respectiv.
Fontul Bold Adevrat (default), n cazul n care textul este afiat n caractere
bold.
Fontul Italic Adevrat (default), n cazul n care textul este afiat n caractere
italice.
Font Name
(Nume Font)
Numele tipului de caractere folosit de controlul etichetei. n mod
normal, vei folosi numele unui font TrueType din Windows.
FontSize
(Mrime Font)
Mrimea, n puncte, a fontului folosit pentru textul etichetei.
Font
Strikethrough
Adevrat (default), n cazul n care textul este afiat n caractere
strikethrough (caracterele au o linie peste ele).
Font Underline Adevrat (default), n cazul n care textul este afiat n caractere
subliniate.
ForeColor Culoarea textului din interiorul textului.
Height
(nlime)
nlimea controlului etichetei, n twips.
Cursor
(Cursorul de
Mouse)
Forma pe care o ia cursorul atunci cnd utilizatorul mic mouse-
ul peste controlul etichetei. Reprezint o gam de forme diferite
pe care le poate lua cursorul.
Name
(Numele)
Numele controlului. Default, Visual Basic genereaz numele
Label1, Label2 i aa mai departe, pe msur ce adugai mai
multe controale de etichet la form.
TabIndex 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
Tag Nu se folosete de ctre Visual Basic. Aceasta este destinat
programatorului pentru identificarea unui comentariu aplicat la
controlul etichetei.
Visible
(Vizibil)
Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i
deci poate folosi sau nu) respectivul control de etichet.
Width
(Limea)
Numrul de twips pe care-i ocup respectivul control etichet n
lime.

Tabelul 2. Evenimentele controlului Etichet (Label)
Eveniment Descriere
Click Apare cnd utilizatorul efectueaz click pe etichet.
Double Click Apare cnd utilizatorul efectueaz dublu click pe etichet..
DragDrop Apare cnd operaiunea drag a etichetei se ncheie.
DragOver Apare n timpul unei operaiuni drag a etichetei.
MouseDown Apare cnd utilizatorul apas butonul de mouse pe etichet.
MouseMove Apare cnd utilizatorul mic mouse-ul peste etichet.
MouseUp 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 MultiLinetrebuie 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 Descriere
BackColor
(Culoarea de
fundal)
Culoarea de fundal a respectivului text 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.
BorderStyle 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.
Enabled
(Activat)
Dac este setat True (default) acel text box poate rspunde la
evenimente. Altfel, Visual Basic oprete procesarea
evenimentelor pentru controlul respectiv.
Font Bold Adevrat (default), n cazul n care textul este afiat n caractere
bold.
Font Italic Adevrat (default), n cazul n care textul este afiat n caractere
italice.
Font Name
(Numele Fontului)
Numele tipului de caractere folosit de text box. n mod normal,
vei folosi numele unui font TrueType din Windows.
FontSize
(Mrime Font)
Mrimea, n puncte, a fontului folosit pentru scrierea textului din
controlul text box.
Font Strikethrough Adevrat (default), n cazul n care textul este afiat n caractere
strikethrough (caracterele au o linie peste ele).
Font Underline Adevrat (default), n cazul n care textul este afiat n caractere
subliniate.
ForeColor Culoarea textului din interiorul proprietii Text.
Height
(nlimea)
nlimea respectivului text box n twips.
MaxLength 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
(Cursorul de mouse)
Forma pe care o ia cursorul atunci cnd utilizatorul mic
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.
Name
(Numele)
Numele controlului. Default, Visual Basic genereaz numele
Text1, Text2 i aa mai departe, pe msur ce adugai mai multe
text box la form.
PasswordChar 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.
ScrollBars 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.
TabIndex 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.
TabStop 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.
Tag Nu se folosete de ctre Visual Basic. Aceasta este destinat
programatorului pentru identificarea unui comentariu aplicat la
text box.
Text 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. .
Visible
(Vizibil)
Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i
deci poate folosi sau nu) respectivul text box.
Width
(Lime)
Numrul de twips pe care-i ocup respectivul text box n lime


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

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 validare
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 Descriere
BackColor
(Culoarea de fundal)
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.
Text Textul care apare asociat unui check box. Dac precedai orice
caracter din text cu un &, acel caracter se va comporta ca tasta
de acces a respectivului check box.
Enabled
(Activat)
Dac este setat True (default), check box poate rspunde la
evenimente. Altfel, Visual Basic oprete procesarea
evenimentelor pentru controlul respectiv.
Font Bold Adevrat (default), n cazul n care textul asociat este afiat n
caractere bold. Altel, Fals.
Font Italic Adevrat (default), n cazul n care textul asociat este afiat n
caractere italice. Altel, Fals.
Font Name
(Nume font)
Numele tipului de font folosit de textul din check box. n mod
normal, vei folosi numele unui font TrueType din Windows.
Font Size
(Mrime font)
Mrimea, n puncte, a fontului folosit pentru textul din check
box.
Font Strikethrough Adevrat (default), n cazul n care textul asociat este afiat n
caractere strikethrough (caracterele au o linie peste ele). Altel,
Fals.
Font Underline Adevrat (default), n cazul n care textul asociat este afiat n
caractere subliniate. Altel, Fals.
ForeColor Codul hexadecimal de culoare al culorii textului asociat check
box..
Height
(nlime)
nlimea, n twips, a unui check box.
Cursor
(Cursorul de Mouse)
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.
Name
(Numele)
Numele controlului. Default, Visual Basic genereaz numele
Check1, Check2 i aa mai departe, pe msur ce adugai mai
multe check box la form.
TabIndex 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.
TabStop 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.
Tag Nu se folosete de ctre Visual Basic. Aceasta este destinat
programatorului pentru identificarea unui comentariu aplicat la
check box.
Checked Arat starea respectivului check box. Poate lua valorile: False-
neselectat (default) sau True-selectat.
Visible Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i
(Vizibil) deci poate folosi sau nu) respectivul check box.
Width
(Limea)
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
Eveniment Descriere
Click Apare cnd utilizatorul efectueaz click pe check box.
DragDrop Apare cnd operaiunea drag a unui check box se ncheie.
DragOver Apare n timpul unei operaiuni drag.
KeyDown Apare cnd utilizatorul apas o tast, att timp ct proprietatea
Previzualizare Tast are valoarea Adevrat pentru controalele check
box; altfel, controlul primete evenimentul KeyDown.
KeyPress Apare cnd utilizatorul apas o tast peste check box.
KeyUp Apare cnd utilizatorul elibereaz o tast.

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 Descriere
BackColor
(Culoarea de fundal)
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.
Text 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.
Enabled
(Activat)
Dac este setat True (default), butonul de opiuni poate
rspunde la evenimente. Altfel, Visual Basic oprete procesarea
evenimentelor pentru controlul respectiv.
Font Bold Adevrat (default), n cazul n care textul din Text este afiat n
caractere bold. Altel, Fals.
Font Italic Adevrat (default), n cazul n care textul din Text este afiat n
caractere italice. Altel, Fals.
FontName Numele stilului folosit pentru textul butonului de opiuni. n
mod normal, vei folosi numele unui font TrueType din
Windows.
FontSize
(Mrime font)
Mrimea, n puncte, a fontului folosit pentru textul butonului de
opiuni.
Font Strikethrough Adevrat (default), n cazul n care textul butonului este afiat
n caractere strikethrough (caracterele au o linie peste ele).
Altel, Fals.
Font Underline Adevrat (default), n cazul n care textul butonului este afiat
n caractere subliniate. Altel, Fals.
ForeColor Codul hexadecimal de culoare al culorii textului asociat
butonului de opiuni.
Height nlimea, n twips, a unui buton de opiuni.
Cursor
(Cursorul de Mouse)
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.
Name
(Numele)
Numele controlului. Default, Visual Basic genereaz numele
Option1, Option2 i aa mai departe, pe msur ce adugai mai
multe opiuni la form.
TabIndex 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.
TabStop 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.
Tag Nu se folosete de ctre Visual Basic. Aceasta este destinat
programatorului pentru identificarea unui comentariu aplicat la
butonul de opiuni.
Checked
(Valoarea)
True sau False (default), indic faptul c butonul de opiuni este
selectat sau nu.
Visible
(Vizibil)
True sau False, arat dac utilizatorul poate vedea sau nu (i
deci poate folosi sau nu) butonul de opiuni.
Width
(Limea)
Numrul de twips pe care i ocup butonul de opiuni n lime.
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
Eveniment Descriere
Click Apare cnd utilizatorul efectueaz click pe butonul de opiuni.
DragDrop Apare cnd operaiunea draga unui buton de opiuni se ncheie.
DragOver Apare n timpul unei operaiuni drag.
KeyDown 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.
KeyPress Apare cnd utilizatorul apas o tast peste butonul de opiuni.
KeyUp 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 bare 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 SHI FT apsat, selectm cu clic mouse ultimul articol
dorit. Toate articolele cuprinse ntre primul i ultimul articol selectat din list vor fi
selectate.

Proprietatea I tems.Count a unei liste returneaz numrul de articole din list.
Proprietatea SelectedI ndex 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 I tems, fie n timpul execuiei aplicaiei, prin intermediul
procedurilor apelate ca rspuns la aciunile utilizatorului.
Astfel, la nceput articolele se vor nscrie la proprietatea I tems, 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 I tems, al crei format este:
Nume caset.I tems (index) unde:
Nume caset este numele casetei (implicit este List1, List2, etc).
Index reprezint poziia articolului n list (primul are numrul de ordine 0).
I tems.Remove este metoda care permite tergerea unui articol din list, avnd formatul
general:
Nume caset.I tems.RemoveAt( index)
Pentru tergerea tuturor articolelor din list se utilizeaz metoda Items.Clear, cu formatul:
Nume caset.I tems.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 Descriere
BackColor
(Culoarea de
fundal)
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.
MultiColumn
(Coloanele)
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.

Enabled
(Activat)
Dac este setat pe valoarea logic True (default), controlul ListBox
poate rspunde la evenimente. Altfel, Visual Basic oprete
procesarea evenimentelor pentru controlul respectiv.
Font Bold Adevrat (default), dac valorile din list sunt afiate cu caractere
bold. Altfel, Fals.
Font Italic Adevrat (default), dac valorile din list sunt afiate n caractere
italice. Altfel, Fals.
Font Name Numele stilului de text folosit n text box. n mod normal, vei folosi
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 Adevrat (default), dac valorile din list sunt afiate n caractere
subliniate. Altel, Fals.
ForeColor Culoarea valorilor din interiorul text box.
Height
(nlimea)
nlimea controlului list box. Se poate preciza sau se definete
automat, funcie de nlimea aleas pentru controlul list box.
Items Permite introducerea elementelor din list la momentul iniial. Cu
Ctrl/Enter se trece la un rnd nou din list.
Cursor
(Cursorul de
Mouse)
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.
SelectionMode
(MultiSelecia)
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.
Name
(Numele)
Numele controlului. Default, Visual Basic genereaz numele List1,
List2 i aa mai departe, pe msur ce adugai mai multe controale
list box.
Sorted
(Sortare)
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.
TabIndex 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).
TabStop 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.
Tag Nu se folosete de ctre Visual Basic. Aceasta este destinat
programatorului pentru identificarea unui comentariu aplicat la
controlul list box.
Visible
(Vizibil)
Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i deci
folosi) controlul list box.
Width
(Limea)
Numrul de twips pe care le ocup controlul list box n lime.

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 Descriere
Click Apare cnd utilizatorul efectueaz click pe controlul list box.
Double Click Apare cnd utilizatorul efectueaz dublu-click pe controlul list
box.
DragDrop Apare cnd operaiunea drag (de tragere) a controlului list
box se ncheie.
Drag Over Apare n timpul unei operaiuni drag.
KeyDown 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.
KeyPress Apare cnd utilizatorul apas o tast peste list box.
KeyUp Apare cnd utilizatorul elibereaz o tast pe list box.
MouseDown Apare cnd utilizatorul apas butonul de mouse peste un list
box.
MouseMove Apare cnd utilizatorul mic mouse-ul peste list box.
MouseUp Apare cnd utilizatorul elibereaz butonul de mouse peste un
list box.
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 Descriere
Items.Add
(Adaug element)
Adaug un singur element la list box.
Items.Clear
(terge)
terge toate elementele din list
SelectedIndex Are ca valoare numrul articolului selectat n cadrul list box .
Items.Count
(Numr elemente
list)
Are ca valoare numrul total de elemente dintr-un list box.
Items.Remove 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))
Proprietate Descriere
Back Color
(Culoarea de
fundal)

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.
Enabled
(Activat)
Dac este setat pe True (default), controlul casetei combo poate
rspunde la evenimente. Altfel, Visual Basic oprete procesarea
evenimentelor pentru controlul respectiv.
Font Bold True (default), dac valorile combo sunt afiate n caractere bold.
Altel, Fals.
Font Italic True (default), dac valorile combo sunt afiate n caractere italice.
Altel, Fals.
Font Name
(Numele fontului)
Numele stilului de text folosit n caseta combo. n mod normal, vei
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) subliniate. Altel, Fals.
ForeColor Culoarea valorilor din interiorul casetei combo.
Height
(nlimea)
nlimea unui control de tip caset combo.
Cursor
(Cursorul de
mouse)
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.
Name
(Numele)
Numele controlului. Default, Visual Basic genereaz numele Combo1,
Combo2 i aa mai departe, pe msur ce adugai mai multe
controale la form
Sorted
(Sortare)
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.
TabIndex 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.
TabStop 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.
Tag Nu se folosete de ctre Visual Basic. Aceasta este destinat
programatorului pentru identificarea unui comentariu aplicat la
controlul casetei combo.
Text Valoarea iniial pe care utilizatorul o vede n caseta combo. Ulterior
aici se depune valoarea selectat.
Visible
(Vizibil)
Adevarat sau fals, arat dac utilizatorul poate vedea sau nu (i deci
poate folosi sau nu) controlul respectiv.
Width
(Limea)
Numrul de twips pe care le ocup controlul casetei combo n lime.

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 Descriere
Click Apare cnd utilizatorul efectueaz click pe controlul casetei
combo.
DragDrop Apare cnd operaiunea drag a unei casete combo se
ncheie.
DragOver Apare n timpul unei operaiuni drag.
KeyDown 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.
KeyPress Apare cnd utilizatorul apas o tast peste caseta combo.
KeyUp Apare cnd utilizatorul elibereaz o tast pe caseta combo.


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 I mage 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 I mage.
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:
- I nputBox care afieaz o caset de dialog ce permite preluarea datelor de la
utilizator;
- MsgBox care permite afiarea diferitelor informaii, mesaje.

a). Funcia I nputBox 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:
I nputBox(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 i apoi am lansat n 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 I nteger 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 Valoare CONSTANT.TXT Descriere
0 MB_OK Butonul OK apare doar n caseta de
mesaj
1 MB_OKCANCEL Apar butoanele OK i Cancel
2 MB_ABORTRETRYIGNORE Apar butoanele Abort, Retry i Cancel
3 MB_YESNOCANCEL Apar butoanele Yes, No i Cancel
4 MB_YESNO Apar butoanele Yes i No
5 MB_RETRYCANCEL Apar butoanele Retry i Cancel
16 MB_ICONSTOP Afieaz iconia cu semnul stop
32 MB_ICONQUESTION Afieaz iconia cu semnul ntrebrii
48 MB_ICONEXCLAMATION Afieaz iconia cu semnul exclamrii
64 MB_ICONINFORMATION Afieaz iconia cu semnul de
informaii
0 MB_DEFBUTTON1 Primul buton este evideniat
256 MB_DEFBUTTON2 Al doilea buton este evideniat iniial
512 MB_DEFBUTTON3 Al treilea buton este evideniat iniial
4096 MB_SYSTEMMODAL 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 Valoare CONSTANT.TXT Descriere
1 IDOK Utilizatorul a apsat butonul OK
2 IDCANCEL Utilizatorul a apsat butonul Cancel
3 IDABORT Utilizatorul a apsat butonul Abort
4 IDRETRY Utilizatorul a apsat butonul Retry
5 IDIGNORE Utilizatorul a apsat butonul Ignore
6 IDYES Utilizatorul a apsat butonul Yes
7 IDNO 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.


Rezolvare:
Formatul
cerut


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 = 0
CheckBox4.Checked = 0
CheckBox5.Checked = 0
CheckBox6.Checked = 0
CheckBox7.Checked = 0
FUNCTIA = 0
VEC = 0
SPORV = 0
SPORT = 0
SPORN = 0
PRIME = 0
CHIRII = 0
SALB = 0
IMPOZIT = 0
PEN = 0
RESTP = 0
End Sub

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 ntre
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:










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.
Penalizri
(%)
ntrziere
(zile)
0 30
5 (30,45)
10 [45,60)
20 60


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 Then
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 + X - 5, YC + Y - 5,
10, 10)
g.DrawEllipse(Pens.Black, XC + X - 5, YC + Y - 5, 10, 10)
Else
g.FillEllipse(Brushes.Firebrick, XC + X - 2, YC + Y - 2, 4,
4)
g.DrawEllipse(Pens.Black, XC + X - 2, YC + Y - 2, 4, 4)
End If
index += 1
Next
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

Potrebbero piacerti anche