Manual C#
Manual C#
LUCRARE METODICO-TIINIFIC
PENTRU OBINEREA GRADULUI DIDACTIC I
Coordonator,
Lector Dr. Mihail Cherciu,
Unversitatea din Bucureti, Facultatea de Metematic i Informatic
Autor,
Profesor informatic Florin Petre,
Colegiul Naional Nicolae Iorga Vlenii de
Munte
1
BUCURETI 2014
CUPRINS
1. PROGRAMARE ORIENTAT PE OBIECTE ............................................................... 5
1.1 PRINCIPII ALE POO N LIMBAJUL C# ..................................................................... 5
1.2 CLASE ............................................................................................................................ 6
1.2.1 Definirea claselor ....................................................................................................... 6
1.2.2 Declararea datelor; ..................................................................................................... 6
1.2.3 Metode. Parametrii metodelor ................................................................................... 7
1.2.4 Suprancrcareametodelor: ........................................................................................ 8
1.2.5 Creareaobiectelor: ...................................................................................................... 8
1.2.7 Constructori.............................................................................................................. 10
1.2.8 Destructori................................................................................................................ 12
1.2.9 Membrii statici ai unei clase .................................................................................... 12
1.2.10 Proprieti ................................................................................................................. 13
1.2.11 Indexatori ................................................................................................................. 14
1.2.12 Clase pariale ............................................................................................................ 15
1.2.13 Clase interioare ........................................................................................................ 16
1.2.14 Probleme rezolvate................................................................................................... 17
1.2.15 Probleme propuse..................................................................................................... 30
1.3 DERIVAREA CLASELOR (MOTENIRE) ............................................................... 34
1.3.1 Utilizarea cuvntului cheie protected......................................................................... 37
1.3.2 Constructorii claselor derivate ................................................................................... 38
1.3.3 Probleme rezolvate..................................................................................................... 40
1.3.4 Probleme propuse...................................................................................................... 45
1.4 INTERFA ................................................................................................................ 48
1.5POLIFORMISM ............................................................................................................ 50
2 TRSTURI ALE LIMBAJULUI C# ............................................................................ 53
2
1.1 DELEGARE ................................................................................................................. 53
2.3CLASA GENERIC ..................................................................................................... 54
2.4 Tratarea excepiilor ...................................................................................................... 55
2.5CLASA STRING ........................................................................................................... 57
2.5.1 Operaii i metode ...................................................................................................... 57
2.6FIIERE TEXT .............................................................................................................. 61
3 CONTROALE ................................................................................................................. 69
3.1 Controlul Button .......................................................................................................... 69
3.2 Control Label ............................................................................................................... 71
3.4 Controlul TextBox ....................................................................................................... 72
3.7 Controlul ListBox ........................................................................................................ 77
3.8 Controlul PictureBox ................................................................................................... 79
3.9 Controlul ProgressBar .................................................................................................. 81
3.10 Controlul Timer .......................................................................................................... 81
3.11 Clasa ImageList .......................................................................................................... 84
3.12 Controlul ListView ..................................................................................................... 85
3.13 Controlul TreeView .................................................................................................... 87
3.14 Controlul WebBrowser ............................................................................................... 89
3.16 Probleme rezolvate...................................................................................................... 90
3.17 Probleme propuse...................................................................................................... 113
4 CLASA GRAPHICS ...................................................................................................... 114
4.1 Principalele metode ale clasei Graphics ..................................................................... 114
4.2 Pensule pentru umplerea formelor .............................................................................. 116
4.3 Desenarea stringului.................................................................................................... 116
5. FISIERE XML .............................................................................................................. 117
5.1 Clasa XMLDocument ................................................................................................. 117
5.2 Clasa reader ................................................................................................................. 124
5.3 Probleme propuse........................................................................................................ 125
6. BAZE DE DATE RELAIONALE ............................................................................. 125
6.1 Tehologia ADO.NET. ................................................................................................. 126
3
6.2 Arhitectura ADO.NET ................................................................................................ 126
6.2.1 Furnizorii de date ..................................................................................................... 126
6.2.2 Seturile de date ......................................................................................................... 127
6.3 Aplicaii cu baze de date n modelul conectat ............................................................ 127
6.4 Aplicaii cu baze de date n modul deconectat ............................................... 132
6.5 Limbaj SQL ................................................................................................................ 134
6.5.1 Interogare simpl ..................................................................................................... 134
6.6.2 Interogare multipl ................................................................................................... 136
6.7 Contrlolul DataGridView............................................................................................ 137
6.9 Proceduri stocate ......................................................................................................... 144
7 METODIC ................................................. ERROR! BOOKMARK NOT DEFINED.
7.1 Finalitate ........................................................................ Error! Bookmark not defined.
7.1.1 Finalitile sistemului de nvmnt .......................... Error! Bookmark not defined.
7.1.2 Finalitile procesului de nvmnt .......................... Error! Bookmark not defined.
7.2 Forme ale educaiei ........................................................ Error! Bookmark not defined.
7.3 Proiectarea activitilor didactice ................................... Error! Bookmark not defined.
7.4 Strategii didactice........................................................... Error! Bookmark not defined.
7.4.1 Principiile didactice .................................................... Error! Bookmark not defined.
7.4.2 Metode ........................................................................ Error! Bookmark not defined.
7.4.3 Mijloace de nvmnt ............................................... Error! Bookmark not defined.
7.5.4 Forme de organizare ................................................... Error! Bookmark not defined.
7.6 Lecia.............................................................................. Error! Bookmark not defined.
7.7 Evaluarea........................................................................ Error! Bookmark not defined.
7.7.1 Funciile evalurii; ...................................................... Error! Bookmark not defined.
7.7.2 Metode complementare de evaluare ........................... Error! Bookmark not defined.
7.8 Cercetare pedagogic ..................................................... Error! Bookmark not defined.
-ANEXA1 ........................................................ ERROR! BOOKMARK NOT DEFINED.
-ANEXA2 ........................................................ ERROR! BOOKMARK NOT DEFINED.
-BIBLIOGRAFIE ............................................................................................................. 149
4
1. PROGRAMARE ORIENTAT PE OBIECTE
1.1 Principii ale POO n limbajul C#
Limbajul C# a fost dezvoltat n cadrul firmei Microsoft. Prima versiune larg
distribuit a fost n anul 2000. C# deriv din limbajul C++. Calitile limbajului: limbaj
simplu, modern, cu productivitate mare n programare, orientat pe obiecte, care permite
realizarea de aplicaii industriale
Principii ale POO n limbajul C#
Abstractizare este capacitatea de a extrage de la un obiect din lumea real numai
informaiile necesare i de a obine concepte virtuale. Obiectele pot fi obiecte fizice sau
obiecte conceptuale.
Incapsularea este capacitatea de nglobare i ascundere de date. Sunt vizibile n
exterior numai datele publice. Starea obiectului este definit att de datele publice ct i
de datele ascunse. Modificrile strii obiectului din exterior se poate face cu ajutorul
metodelor publice. Incapsularea mreste sigurana i fiablitatea programelor deoarece
datele nu se pot modifica accidental din exterior.
Mostenirea este capacitatea unei clase de a conine toate datele i metodele
superclasei sale. Clasa mai conine i alte date i metode. C# , fa de limbajul C++ ,
elemin motenirea multipl reliznd o versiune mai cursiv.
5
Poliformismul este capacitatea unei clase de a conine date i metode ale
superclasei, anumite metode le redefinete, n felul acesta permite obiectului s ia mai
multe stri. O anumit opraie se realizeaz diferit n clase diferite. n C# metodele nu
sunt implicit virtual i se elimin astfel riscul de a scrie metode accidental sau implicit.
1.2 CLASE
Clasa este un tip de date care modeleaz obiecte din lumea real sau obiecte
abstracte. Clasele ncapsuleaz date i funcii care opereaz cu aceste date. Clasa
cuprinde:
Membri care sunt variabile care rein informaii despre obiect;
Metode care sunt funcii membre ale clasei;
Clasa poate avea un numr orict de mare de cmpuri i metode.
unde:
- modificatorAcces-este opional. Implicit este de tip private;
6
- tipData- reprezint tipul datei. Datele pot fi de orice tip inclusiv clase;
- nume- numele datei;
Datele pot fi: a) constante, b) cmpuri
Constantele- sunt date care nu se modific ntr-un program i se declar prin
cuvntul const. Sintaxa este: [modificator de acces] const tip identificator =
expresieConstant; Constanta mai poate avea ca modificator de acces: new, public,
protected,internal, protected internal, private.
Exemplu
class Constante
{
public const int MAX = 100;
const string SALUT = "Buna ziua!";
}
Cmpul- reprezint o dat variabil a unei clase. n afar de modificatorii
menionai mai sus, se mai adaug: new, readonly, volatile, static. Opional, cmpurile
pot fi iniializate cu valori compatibile. Un astfel de cmp se poate folosi fie prin numelui
su, fie folosind numele clasei sau al obiectului.
7
-parametru trasmis prin referin este un parametru care are valoare sau nu are la apel, se
modific n timpul execuiei metodei i se vede dup apelul metodei. Asupra
parametrilor formali se aplic modificatorul ref.
Exemplu:
public void schimb (ref int a, ref int b)
{int aux;
aux=a;a=b;aux=b;
}
Pentru tablouri modificatorul este params.
Exemplu: public void vector(params int []v);
8
1. public o metod sau un membru de tip public are vizibilitate n afara clasei;
2. private este modificatorul de acces care se vede doar n interiorul clasei;
3. protected este modificatorul de acces care se vede doar n clasele motenite;
Exemplu: Definii o clas de tip public care conine un membru de tip public. Membrul
poate fi accesat.
public class a
{
public int i = 20;
}
class Program
{
static void Main(string[] args)
{
a x = new a();
Console.WriteLine(x.i);
}
}
Exemplu: Clasa este public, membrul i este private, deci nu este accesat din afara clasei
public class a
{
int i = 20;
}
class Program
{
static void Main(string[] args)
{
a x = new a();
Console.WriteLine(x.i);
}
Exemplu: Clasa este public, membrul i este protected, deci nu este acccesat.
9
public class a
{
protected int i = 20;
}
class Program
{
static void Main(string[] args)
{
a x = new a();
Console.WriteLine(x.i);
}
}
1.2.7 Constructori
Constructorul este o funcie care face parte din definiia clasei. Costructorul este
folosit doar pentru crearea de obiecte.
Caracteristicile constructorilor:
pot exista mai muli constructori care se pot diferenia prin lista de parametri;
au acelai nume cu cel al clasei;
nu au tip de retur, nici mcar void;
pot fi suprancrcai ca orice metod;
constructorii nu pot fi motenii;
Dac o clas nu are definit niciun constructor, se va realiza automat constructor
implicit, adic constructorul fr parametri al clasei de baz.
Exemplu: S se defineac o clas care nu conine constructor. Ea va conine un membru
numr ntreg i o metod care returmeaz o valoare ntreag.
class a
{
public int i = 123;
public int suma(int i)
{
10
return i + 33;
}
}
class Program
{
static void Main(string[] args)
{
a ob=new a();//contructorul este implicit
Console.WriteLine(ob.i+" "+ob.suma(i));
}
}
Exemplu: S se defineasc o clas care conine un constructor fr parametru.
class contructor
{
public int n;
public contructor() { }//constructorul clasei
}
class Program
{
static void Main(string[] args)
{
contructor o = newcontructor();
Console.WriteLine(o.n);
}
}
Exemplu: S se defineasc o clas care conine constructor cu parametru i un membru.
namespace ConsoleApplication1
{
class contructor
{
11
public int n;
public contructor(int i) { n = i; }
}
class Program
{
static void Main(string[] args)
{
int i = 234;
contructor o = newcontructor(i);
Console.WriteLine(o.n);
}
}
1.2.8 Destructori
Destructorul clasei distruge instanele unei clase. Numele destructorului coincide cu
numele clasei, fiind precedat de caracterul ~. Destructorul nu are parametri i nici
modificator de acces. Destructorul este apelat automat. ntr-o clas exist un singur
destructor. Destructorul nu poate fi motenit.
1.2.10 Proprieti
Sunt membri ai unei clase i sunt folosite pentru a accesa date membru de tip
private far s se ncalce principiul proteciei datelor. Ele conin dou metode de acces:
1. get care are caracteristicile:
nu are parametri;
are tip de retur de acelai tip cu tipul clasei;
2. Set care are caracteristicile:
Are un parametru implicit numit value care este de tipul clasei i care
reine valoarea cmpului gestionat de ctre proprietate;
Are void ca tip de retur;
Proprieti statice
Atunci cnd este nevoie s se acceseze cmpuri statice de tip private proprietile
se pot declara de tip static. Proprietile statice acceseaz doar date membru de tip static.
class pro_static
{
static int n = 123;
public static int pro
{
13
get { return n; }
set { n = value; }
}
}
class Program
{
static void Main(string[] args)
{
Console.Write(pro_static.pro);
}
}
1.2.11 Indexori
Permit unei clase s fie indexate la fel ca la un tablou. Sintaxa este asemntoare cu
a proprietilor. Numele unui indexor este totdeauna this. Poate returna mai muli membri
ai clasei. El nu poate fi declarat static.
Sintax
tipReturmat this [int index]
{
get
{
//se returneaz valoarea prin index
}
set
{
//se modific valoarea prin index
}
}
Exemplu
public class f
{
14
string[] v = new string[10];
int n;
public f(int a)
{ n = a; }
public string this[int index]
{
get
{
return v[index];
}
set
{
v[index] = value;
}
}
class Program
{
static void Main(string[] args)
{
f ob = new f(6);
for (int i = 0; i <= 5; i++)
ob[i] = i.ToString();
for (int i = 0; i <= 5; i++)
Console.WriteLine(ob[i] + " ");
}
}
15
Aplicaie:Folosind constructor i clase pariale, se va construi o clas care conine
doi membri i dou metode:
- O metod afieaz suma celor doi membri;
- O metod afieaz produsul lor.
public partial class A
{
public int x,y;
public A (int a,int b)
{x=a;y=b;}
public int suma ()
{ return x+y;}
}
public partial class A
{
public int produs()
{ return x * y; }
}
class Program
{
static void Main(string[] args)
{int a=10, b=20;
A o=new A(a,b);
Console.WriteLine(o.suma());
Console.WriteLine(o.produs());}
}
16
Aplicatie. S se defineasc o clas n interiorul altei clase.
class a
{
public class b
{
public void f()
{
Console.WriteLine("clase interioare");
}
}
}
class Program
{
static void Main(string[] args)
{
a.b ob =new a.b();
ob.f();
}
}
17
public back1(int x)
{n=x;}
void succ()
{
if(st[niv]<n)
{as1=true;
st[niv]++;
}
else as1=false;
}
void afis()
{
for (int i = 1; i <= niv; i++)
Console.Write(st[i] + " ");
Console.WriteLine();
}
public void valid()
{
ev=true;
for (int i = 1; i <= niv-1; i++)
if (st[i] == st[niv])
ev = false;
}
public void back()
{
for (int i = 1; i <= n; i++) st[i] = 0;
niv=1;
st[1]=0;
while(niv>0)
{
18
do
{
succ();
if(as1==true)
valid();
} while (as1 && !ev);
if (as1)
if (niv == n)
afis();
else
{
niv++;
st[niv] = 0;
}
else niv--;
}
}
}
classProgram
{
static void Main(string[] args)
{
int x = 3;
back1 ob = new back1(x);
ob.back();
}
}
}
2. S se defineasc o clas care creeaz o structur de tip list i care mai conine
metodele:
19
Inserare()- care insereaz pe poziia a doua o valoare egal cu 333;
tergere() care terge elementul de pe poziia 2;
Afi() care afieaz elementele listei;
Public class lista
{
public int []v=newint [100];
public int n;
public lista ()
{ }
public void creare ()
{Console.WriteLine("n=");
n = Int32.Parse( Console.ReadLine() );
for(int i=1;i<=n;i++)
{Console.Write("v["+i+"]=");
v[i] = Int32.Parse( Console.ReadLine() );
}
}
public void inserare()
{
int j;
for (j = n; j >= 2; j--)
v[j + 1] = v[j];
v[2] = 333;
n++;
}
public void stergere()
{
for (int j = 2; j <= n - 1; j++)
v[j] = v[j + 1];
n--;
20
}
public void afis()
{
for (int i = 1; i <= n; i++)
Console.Write(v[i]+" " );
}
}
class Program
{
static void Main(string[] args)
{
lista o = new lista_static();
o.creare();
o.afis();
o.inserare();
o.afis();
o.stergere();
o.afis();
}
}
}
3. S se defineasc o clas care creeaz o structur de tip stiv i care mai conine
meodele:
Inserare()- care insereaz elemente n stiv;
tergere() care terge din stiv;
Afi() care afieaz elementele stivei;
using System;
usingSystem.Text;
namespace ConsoleApplication1
{public class stiva
21
{
public intdm,vf,val;
public int []st=new int[10];
public stiva(int x)
{
dm = x;
}
public boolvida_st()
{
if(vf==0)
return true;
else
return false;
}
public bool plina_st()
{
if(vf==dm)
return true;
else
return false;
}
public void inserare_st()
{Console.WriteLine("val=");
intval= Int16.Parse( Console.ReadLine());
if(!plina_st())
st[++vf]=val;
else
Console.WriteLine("Eroare! Stivaesteplina!");
}
public void extragere_st()
22
{
if(!vida_st())
val=st[vf--];
else
Console.Write("Eroare! Stivaestevida!");
}
public void afis()
{
for(inti=1;i<=vf;i++)
Console.Write(st[i]+" ");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("dimensiunea maxima a stiveieste");
int x =int.Parse( Console.ReadLine());
stivaob = new stiva(x);
ob.inserare_st();
ob.inserare_st();
ob.inserare_st();
ob.afis();
ob.extragere_st();
ob.afis();
}
}
}
3. S se defineasc o clas care creeaz o structur de tip coad i care mai conine
metodele:
23
Inserare()- care insereaz elemente n coad;
Stergere() care terge din coad;
Afi() care afieaz elementele din coad;
using System;
using System.Text;
namespace ConsoleApplication1
{
class coada
{
public int inc = 1, sf = 1,dim,val;
public int[] st = new int[10];
public coada(int x)
{
dim = x;
}
public bool vida_c()
{
if (inc == sf)
return true;
else
return false;
}
public bool plina_c()
{
if(sf==dim+1)
return true;
else
return false;
}
publicvoid inserare_c()
24
{
Console.WriteLine("dati val");
int val = int.Parse(Console.ReadLine());
if (!plina_c())
st[sf++] = val;
else
Console.WriteLine("Eroare! Coada este plina!");
}
public void extragere_st()
{
if (!vida_c())
val = st[inc++];
else
Console.WriteLine("Eroare! Coada este vida!");
}
publicvoid afis()
{
for (int i = inc; i <= sf; i++)
Console.Write(st[i] + " ");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("dati dimensiunea maxima");
int dim = int.Parse(Console.ReadLine());
coada ob = newcoada(dim);
ob.inserare_c();
ob.inserare_c();
25
ob.inserare_c();
ob.afis();
ob.extragere_st();
ob.afis();
}
}
}
26
public void adunare()
{
int sr = c1.re + c2.re;
int si = c1.im + c2.im;
Console.WriteLine(sr + "+" + si + "i");
}
public double modul()
{ return Math.Sqrt(c1.re * c1.re + c1.im + c1.im); }
}
class Program
{
static void Main(string[] args)
{int a = int.Parse(Console.ReadLine());
int b = int.Parse(Console.ReadLine());
int c = int.Parse(Console.ReadLine());
int d = int.Parse(Console.ReadLine());
operatii_numere_complexe ob = new operatii_numere_complexe(a,b,c,d);
ob.afis();
ob.adunare();
Console.WriteLine(ob.modul());
}
}
}
5. Realizai o clas arbore care conine metodele:
creare_nod()- care creeaz un arbore binar;
svd, sdv,vsd- cte o metod pentru cele trei parcurgeri ale arborelui;
using System;
using System.Text;
namespace ConsoleApplication7
{
27
public class nod
{
public int val;
public nod st,dr;
}
public class arbore
{
public nod rad;
public nod creare_nod()
{
nod rad=new nod ();
int val1 = int.Parse(Console.ReadLine());
if (val1 != 0)
{
rad = new nod();
rad.val = val1;
rad.st=creare_nod();
rad.dr=creare_nod();
return rad;
}
else
{
return null ;
}
}
public void svd(nod c)
{if(c.st !=null ) svd(c.st);
Console .Write(c.val+" ");
if(c.dr !=null ) svd(c.dr);
}
28
public void vsd(nod c)
{
if (c != null)
{ Console .Write(c.val+" ");
vsd(c.st);
vsd(c.dr);
}
}
public void sdv(nod c)
{
if (c != null)
{sdv(c.st);
sdv(c.dr);
Console .Write(c.val+" ");
}
}
}
class Program
{
static void Main(string[] args)
{
nod rad=new nod ();
arbore ob = new arbore();
rad= ob.creare_nod();
Console.WriteLine("parcurgere sdv");
ob.sdv(rad);
ob.svd(rad);
ob.vsd(rad);
}
}
29
}
} }
c. class a{ } d. class a{ }
32
Console.WriteLine(x + " " + y);
}
}
6. Ce afieaz programul urmtor:
class unu
{ static public int a, b,z=33;
static public void p(ref int a, int b)
{
a = a + 1;
b = a;
Console.Write(a + " " + b);
}
}
class Program
{
static void Main(string[] args)
{
int a= 1,b=77;
unu.p(ref a, b);
Console.Write(unu.a+" ");
Console.WriteLine(unu.z+" ");
Console.WriteLine(b);
} }
33
8. Se dau datele a n sportivi (nume, prenume, prob de concurs). Realizai o clas
care cuprinde metodele:
Citire()- citete datele sportivilor;
Afis()- afieaz sportivii;
Afis1()- afieaza sporivii care particip la proba maraton.
9. Se dau n puncte n plan. Pentru fiecare punct de cunosc cele dou coordonate x i
y. Definii o clas care conine metodele:
Citire()- citete punctele;
Afis()- afieaz punctele din cadranul II;
Afis1()- afieaz punctele de pe axa Ox;
Rspunsuri: 1) a 2) d3) c 4) c 5) b 6)2 22 777) 2 2 0 33 77
34
{
public class a
{
public int x1 = 22;
public void afis()
{Console.Write(x1);
}
}
public class b:a
{public int x;
public b(int n)
{x=n;}
public void afis1()
{Console.Write(x+" "+x1);}
}
class Program
{
static void Main(string[] args)
{
int n = 456;
b ob = new b(n);
ob.afis1();
}
}
}
Aplicaie S se defineasc o clas de baz denumit matrice care cuprinde metodele citire
i afiare a unei matrici. Se mai definete o clas derivat numit diagonala care
motenete clasa matrice i conine o metod care returneaz elementele de pe diagonala
principal.
using System;
35
using System.Text;
namespace ConsoleApplication1
{ public class matrice
{
public int[,] a = new int[4, 4];
public int n;
public void citire()
{
Console.WriteLine("n=");
n = int.Parse(Console.ReadLine());
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{ Console.WriteLine("a["+i+"]["+j+"]=");
a[i, j] = int.Parse(Console.ReadLine());
}
}
public void afis()
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
Console.Write(a[i, j] + " ");
Console.WriteLine();
}
}
}
public class diagonale : matrice
{
public void diag_principala()
{ for (int i = 1; i <= n; i++)
36
Console.Write(a[i,i]+" ");
}
}
class Program
{
static void Main(string[] args)
{
diagonale ob = new diagonale();
ob.citire();
ob.afis();
ob.diag_principala();
}
}
}
37
public class b:a
{public int x;
public b(int n)
{x=n;}
public void afis1()
{Console.Write(x+" "+x1);}
}
class Program
{
static void Main(string[] args)
{
int n = 456;
b ob = new b(n);
ob.afis1();
}
}
}
38
Console.WriteLine("Contructor baza:");
}
}
public class derivat:baza
{
public derivat()
{Console.WriteLine("constructor derivat");
}
}
class Program
{
static void Main(string[] args)
{derivat o=new derivat();
}
}
}
Exemplul arat c atunci cnd se execut constructorul clasei derivate,se execut
mai nti contructorul clasei de baz. Poate exista i apelul explicit al constructorului
bazei.
Sintaxa este:public derivate():base()
using System;
using System.Text;
namespace ConsoleApplication1
{
public class baza
{
public int x;
public baza (int y)
{
x = y;
39
}
}
public class derivat:baza
{public int b;
public derivat(int a,int y):base(y)
{b=a;
}
}
class Program
{
static void Main(string[] args)
{derivat o=new derivat(10,20);
Console.WriteLine(o.x+" "+o.b);
}
40
n = int.Parse(Console.ReadLine());
for(int i=1;i<=n;i++)
{Console.WriteLine("v["+i+"]=");
v[i] = int.Parse(Console.ReadLine());
}
}
public void afis()
{
for (int i = 1; i <= n; i++)
{
Console.Write(v[i] + " ");
Console.WriteLine();
}
}
}
public class subsir:vector
{
public void sterge_elemente_pare()
{
int i, j;
for (i = n; i >= 1; i--)
if (v[i] % 2 == 0)
{
for (j = i; j < n; j++)
v[j] = v[j + 1];
n--;
}
for ( i = 1; i <= n; i++)
Console.Write(v[i] + " ");
}
41
public void inserare()
{
int i, j;
for (i = 1; i <= n; i++)
if (v[i] > 0)
{
for (j = n; j >= i; j--)
v[j + 1] = v[j]; v[i] = 0;
n++; i++;
}
for (i = 1; i <= n; i++)
Console.Write(v[i] + " ");
}
}
class Program
{
static void Main(string[] args)
{
subsir ob = new subsir();
ob.citire();
ob.afis();
ob.sterge_elemente_pare();
Console.WriteLine();
ob.inserare();
}
}
}
2 Definii o clas care creeaz i afieaz o list simplu nlnuit numit creare.
Creai o clas prelucrri care motenete clasa creare i care cuprinde metoda
Medie (afieaz media aritmetic a elementelor pare din list).
using System;
42
using System.Text;
namespace ConsoleApplication4
{
public class Node
{
public int val;
public Node leg;
}
public class creare
{
public Node c = new Node();
public Node p = new Node();
public Node u = new Node();
public void add()
{
c = new Node();
c.val = 1;
c.leg = null;
p = c; u = c;
for (int i = 2; i <= 4; i++)
{
c = new Node();
c.val = i;
c.leg = null;
u.leg = c; u = c;
}
}
public void parcurgere()
{
c = p;
43
while (c != null)
{
Console.WriteLine(c.val);
c = c.leg;
}
}
}
public class prelucrri : creare
{//Node c=new Node ();
public void medie()
{
int s = 0, nr=0;
c = p;
while (c != null)
{
if (c.val % 2 == 0)
{
s = s + c.val;
nr++;
}
c = c.leg;
}
double ma = s / nr;
Console.WriteLine("media" + ma);
}
}
class Program
{
static void Main(string[] args)
{
44
prelucrri ob = new prelucrri ();
ob.add();
ob.parcurgere();
ob.medie();
}
}
}
45
ob.afis();
}}
a) 1 3 5 b) 3 c) 5 d) eroare
2. Pentru urmtoarea secven de program ce se va afia?
public class derivat : baza
{
public int d;
public derivat(int x, int y, int z, int t) : base(x, y, z)
{ d = t; }
public void afis2()
{Console.WriteLine(b);
}
}
class Program {
static void Main(string[] args)
{ derivat ob = new derivat(1, 3, 5, 7);
ob.afis2();
}}
a) 1 b) 3 c) 5 d) eroare
3. Pentru urmtoarea secven de program ce se va afia?
public class derivat : baza
{
public int d;
public derivat(int x, int y, int z, int t) : base(x, y, z)
{ d = t; }
public void afis1()
{ Console.WriteLine(a); }
}
class Program {
static void Main(string[] args)
46
{ derivat ob = new derivat(1, 3, 5, 7);
ob.afis3();
}
a) 1 b) 3 c) 5 d) eroare
4. Pentru urmtoarea secven de program ce se va afia:
public class derivat : baza
{
public int d;
public derivat(int x, int y, int z, int t) : base(x, y, z)
{ d = t; }
public void afis1()
{ Console.WriteLine(a); }}
class Program {
static void Main(string[] args)
{ baza ob = new baza(1, 3, 5, 7);
ob.afis();
}
a) 1 3 5 b) 3 c) 5 d) eroare
47
static void Main(string[] args)
{ derivat ob = new derivat(1, 3, 5, 7);
ob.afis3();
}
}
b) 1 b) 3 c) 5 d) eroare
6. Definii o clas care creeaz i afieaz o list simplu nlnuit numit creare.
Creai o clas prelucrri care motenete clasa creare i care cuprinde metodele
a) Ultimpar() - Afieaz ultimul element par din list:
b) Verif() - verific dac toate elementele din list sunt divizibile cu 3;
c) Max() - afieaz elementul cel mai mare;
d) Adaug() adaug un nod la sfritul listei, valoarea nodului este cel mai mic
element par;
e) terge () terge primul nod;
Rspunsuri 1) a 2) d 3) a 4) d 5) c
1.4 INTERFA
O interfa este un tip de referin care nu se implementeaz.
Caracteristici:
- Nu conine cmpuri;
- Clasele pot moteni mai mult interfete;
- O interfa poate moteni o alt interfa;
Sintax: [modificatori] interface nume
{
//Corpul interfetei
}
Exemplu:
using System;
using System.Text;
namespace ConsoleApplication4
48
{
public interface t1
{
void afis1();
}
public interface t2
{
void afis2();
}
public class c : t1,t2
{
public void afis1()
{
Console.WriteLine("a");
}
public void afis2()
{
Console.WriteLine("b");
}
public void afis3()
{
Console.WriteLine("c");
}
}
class Program
{
static void Main(string[] args)
{
c ob = new c();
ob.afis1();
49
}
}
}
1.5 POLIFORMISM
Poliformismul este un concept de baz al programrii orientate pe obiecte. O
entitate se poate comporta diferit n funcie de context. Se poate invoca metode ale
claselor derivate cu ajutorul unei referine la clasa de baz. Se poate defini o clas
derivat care motenete clasa de baz, dar care redefinete una sau mai multe metode.
using System;
namespace ConsoleApplication1
{
public class a
{
public void afis()
{
Console.WriteLine("clasa a");
}
}
public class b : a
{
public void afis()
{
Console.WriteLine("clasab");
}
}
class Program
{
static void Main(string[] args)
{
50
a ob = new a();
ob.afis();// afieaz clasa a
b o1 = new b();
o1.afis();// afieaz clasab
a o = (a)o1;//poliformism de motenire afieaza clasaa
o.afis();
}
}
}
1.5.1 Metode virtuale
Poliformismul bazat pe motenire se relizeaz atunci cnd un obiect al clasei de
baz poate accesa membri ai clasei derivate. Pentru acesta:
Clasa de baz declar un membru virtual;
Clasa derivat redefinete acel membru, cu aceeai semntur i tip de retur,
scriind cuvntul overide naintea tipului de retur.
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
public class a
{
virtual public void afis()
{
Console.WriteLine("clasa a");
}
}
public class b : a
{
override public void afis()
51
{
Console.WriteLine("clasab");
}
}
class Program
{
static void Main(string[] args)
{
a ob = new a();
ob.afis();
b o1 = new b();
o1.afis();
a o2 = new b();
o2.afis();
}
}
}
Observaii
1. Se pot declara virtual urmtorii membri: metode, proprieti, indexatori,
evenimente;
2. Cmpurile nu se pot declara virtual;
3. Metodele override trebuie sa aib acelai nivel de accesibilitate cu al metodelor
virtual;
4. Nu se redefinesc metodele statice i cele non-virtuale;
Modificatorul sealed se folosete atunci cnd mpiedic alte clase s motenesc o
anumit metod sau membru.
class a
{
protected virtual void afis()
{
52
Console.WriteLine("clasa a");
}
}
class b : a
{
sealed protected override void afis()// poate meteni
{
Console.WriteLine("clasa b");
}
}
class c:b
{
protected override void afis()
{
Console.WriteLine("clasa b");// nu poate moteni
}
}
53
Iar ataarea metodelor este:
d=delegare.f;// lista este f
d+=delegare.g;// lista este f(),g()
d+=delegare.g;//lista este f(),g(),g()
d-=delegare.g;//lista este f(),g()
Dac se invoc delegri cu tip de retur, se reine ultima metod din lista de invocare.
1.2 Evenimente
Se pot realiza evenimete precum click pe un obiect, apsarea unei taste. Sistemul
de operare ntiineaz fereastra activ de apariia unui evniment. Clasa care semnaleaz
evenimentul este publisher, iar clasele care sunt informate se numesc subscribers.
Evenimentul este un membru al clasei care public evenimentul.
Lucrul cu evenimente
-se declar un tip delegat;
- de declar evenimetul de tip public n clasa publisher cu ajutorul cuvtului cheie event;
-se scrie codul care produce evenimentul;
-declar event Handler-ele;
-nregistreaz Handler.
54
}
Aceast clas memoreaz n cmpul a o valoare de tip ntreg. Dac dorim s
reinem date de tip double sau string, atunci trebuie se rescriem codul. Se poate s scriem
o dat codul care s lucreze cu toate tipurile dorite. Clasa se numete clasa generic.
Clasele generice sunt clase parametrice. Clasa generic arat astfel:
public class stiva<T>
{private T []a;
private int n;
public stiva (int max)
{
a=new T [max];
}
public void push(T val)
{
a[n++]=val;
}
public T pop()
{
return a[--n];
Parametrul T se numete parametru generic.
Instanierea claselor generice: stiva<int> o1 = new stiva<int>(22);
55
Aplicaie: Se dau dou numere x, y. S se afieze ctul mpririi lui x la y.
using System;
class Exceptie
{
public static void Main()
{
try
{
int x = 0,y=9,z;
z = y/x;
}
catch { Console.WriteLine("x nu poate fi 0");}
finally
{ Console.WriteLine("Program complet");
Console.Read(); }
}
}
Blocul cach poate avea parametru anume un tip al limbajului.
Tipuri de excepii:
1. DivideByZeroException. nu se poate realiza mprirea cu 0.;
2. OverflowException-verific dac dimensiunea numrului este prea mare;
3. FileNotFoundException- verific dac fiierul s-a deschis:
4. Int32.TryParse(x, out k)- Numrul nuverific dac numarul este de tip int;
Aplicaie: S se scrie o secven de cod care verific dac fiierul este deschis.
static void ReadFile()
{ StreamReader reader = null;
try
{ reader = File.OpenText(@"C:\fisier.txt");
if (reader.EndOfStream) return;
Console.WriteLine(reader.ReadToEnd());
56
}
catch (FileNotFoundException)
{
Console.WriteLine("fiserul nu este deschis");
}
}
Dac nu este cunoscut tipul de excepie, programul de mai jos afieaz tipul.
try
{
int value = 1 / int.Parse("0");
Console.WriteLine(value);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
57
Console.Write( sir[ctr]+" ");
}
Operatori:
1. Operatori relaionali egal ==, diferit !=.
Aplicaie: Se dau dou iruri de caractere. S se realizeze un program c# care
verific dac cele dou iruri sunt identice.
static void Main(string[] args)
{
String sir1 = "info";
String sir2= "Infi";
if (sir1 == sir2)
{
System.Console.WriteLine("siruri identice");
}
else
{
System.Console.WriteLine("nu sunt identice");
}
}
2. Operatori de concatenare : +
Metode
1. Length(sir- returneaz lungimea unui ir de caractere.
static void Main(string[] args)
{
String s1 = "informatica";
Console.WriteLine(s1.Length);
}
61
Cele dou clase pe care le vom utiliza sunt StreamReader (pentru citirea datelor din
fiier) i StreamWriter (pentru scrierea datelor n fiier).
Dac nu este specificat o cale complet ctre fiier, ci doar numele fiierului,
atunci date.txt trebuie s se afle n acelai folder cu executabilul. Acest folder este de
regul bin\deburg.
2.6.1 Operaii cu fiier:
1. StreamReader fin = new StreamReader("TextFile1.txt");-crearea unui obiect
pentru citire din fiier
2. fin.Close();- nchiderea fiierelor
3. StreamWriter fout = new StreamWriter("TextFile2.txt");");- creare obiect pentru
afiare din fiier;
4. fin.ReadLine();- citire din fiier;
5. fout.WriteLine(cuv);- afiare n fisier;
6. while ((linie = f.ReadLine()) != null)- parcurgere linie cu linie pn la sfritul
fiierului
Aplicaie:n fiierul TextFile1.txt pe prima linie se afl un ir de caractere. S se
afieze n fiierul TextFile2.txt toate cuvintele din primul fiier, cte un cuvnt pe fiecare
linie.
using System;
using System.IO;
namespace Fisiere
{
class Program
{
static void Main(string[] args)
{
// citire din fisier
StreamReader fin = new StreamReader("TextFile1.txt");
string linie = fin.ReadLine();
fin.Close();
62
// separare in cuvinte
string[] cuvinte = linie.Split( );
// tiparirea cuvintelor
StreamWriter fout = new StreamWriter("TextFile2.txt");
foreach (string cuv in cuvinte)
fout.WriteLine(cuv);
fout.Close();
}
}
}
Aplicaie: n fiierul TextFile1.txt se gsesc pe prima linie mai multe numere ntregi. S
se afieze pe ecran suma lor.
using System;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int s = 0;
// citire din fisier
StreamReader fin = new StreamReader("TextFile1.txt");
string linie = fin.ReadLine();
string[] cuvinte = linie.Split(' ');
foreach (string cuv in cuvinte)
{
Console.WriteLine(cuv);
int x = int.Parse(cuv);
s = s + x;
63
}
Console.Write(s);
fin.Close();
}
}
}
Aplicaie:n fiierul TextFile1.txt se gsesc pe mai multe linii mai multe numere ntregi.
S se afieze pe ecran suma lor.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int suma = 0;
string linie;
64
}
}
}
Aplicatie
Sa se afiseze intr-un fisier text valorile introduse in doua obiecte textBox.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication21
{
public partial class Form1 : Form
{
//StreamWriter fout = File.AppendText("TextFile1.txt");
public Form1()
{
InitializeComponent();
}
}
}
Aplicatie
In fisierul textFile1 se gasesc mai multe numere. Sa se afiseze suma lor.
suma += int.Parse(x);
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
65
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication23
{
public partial class Form1 : Form
{
int suma = 0;
public Form1()
{
InitializeComponent();
}
}
}
}
MessageBox.Show("fghhfh");
while (!fin.EndOfStream)
{
string l = fin.ReadLine();
}
}
66
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication15
{
public partial class Form1 : Form
{
string linie;
public Form1()
{
InitializeComponent();
}
67
}
f.Close();
}
}
}
}
2.6.2 Probleme propuse
1. n fiierul sir.in se gsesc pe prima linie mai multe numere ntregi. S se afieze n
fiierul sir.out elementele din primul fiier ordonate.
2. Pe prima linie a fiierului sir.in se afl un numr natural, iar pe a doua linie n
numere naturale. S se afieze pe ecran elementele de pe a doua linie n ordinea
invers a apariiei lor n fiier.
68
3. Pe prima linie a fiierului mat.in se gsete un numr natural, iar pe urmtoarele n
linii n numere naturale. S se afieze n fiierul mat.out liniile cu cele mai multe
elemente nule
3 CONTROALE
Biblioteca .NET conine clase definite n spaiu de nume System.Windows.Form
cum ar fi Button, ListBox, Label. Utilizatotul trebuie s creeze obiecte folosind clasele
menionate. Se pot crea prin aducerea din Toolbox, s seteze proprieti i s scrie codul
pentru evenimente.
69
}
private void button1_MouseLeave(object sender, EventArgs e)
{
button1.BackColor = Color.Blue;
}
private void button2_MouseUp(object sender, MouseEventArgs e)
{
button2.BackColor = Color.Yellow;
}
private void button2_MouseLeave(object sender, EventArgs e)
{
button2.BackColor = Color.Blue;
}
private void button3_MouseMove(object sender, MouseEventArgs e)
{
button3.BackColor = Color.Gold;
}
private void button3_MouseLeave(object sender, EventArgs e)
{
button3.BackColor = Color.Blue;
}
private void button4_MouseHover(object sender, EventArgs e)
{
button4.BackColor = Color.Green;
}
private void button4_MouseLeave(object sender, EventArgs e)
{
button4.BackColor = Color.Blue;
}}
70
3.2 Control Label
Controalele label au menirea de a plasa un text pe o form, cu informaii pentru
utilizator.
Proprieti :
- Text- afieaz valoarea textului;
- Size dimensiunea textului cu cele dou componente nlime (Height) si lime
(Width);
- Font valoarea fontului cu cele trei componenete (font, size, style);
- Dock zona unde este plasat pe form;
- ForeColor- culoarea textului;
- Location- returneaz poziia pe forma (coordonatele x si y);
Aplicaie: S se realizeze o aplicaie care conine un label i un buton button. La
realizarea evenimentului click al butonului se modific textul, locaia, fontul,
dimensiunea.
Etape:
1. Se plaseaz pe ecran un label care iniial are valoare label1 i un button;
2. Se seteaz valoarea text al butonului;
3. Se trateaz evenimentul click al butonului:
private void button1_Click(object sender, EventArgs e)
{
label1.ForeColor = Color.Red;
int a = label1.Location.X;
int b = label1.Location.Y;
a = a + 20;
b = b + 20;
label1.Location=new Point(a,b);
label1.Size = new Size(60, 300);
label1.Font=new Font(FontFamily.GenericSerif,22,FontStyle.Bold);
label1.Visible = true;
label1.Dock = DockStyle.Left;
}
71
3.3 Controlul LinkLabel
Afieaz o poriune de text ca un hyperlink. La un click pe hyperlink se poate
deschide o pagin de web sau o alt aplicaie.
Proprieti :
- LinkVisited- schimb culoarea textului dup evenimentul click;
- Text- valoarea text a obiectului;
Metode:
- Start()- pentru a lansa aplicaia;
Aplicaie (linklabel): Realizai o aplicaie care are dou obiecte LinkLabel, primul va
deschide o pagin web, al doilea o aplicaie din calculator;
- Se aduc pe form dou obiecte linkLabel i dou obiecte label care vor afia
mesaje corespunztoare;
- Se trateaz evenimentele click ale celor dou linkLlabel:
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
linkLabel1.LinkVisited = true;
linkLabel1.Text = "www.google.com";
System.Diagnostics.Process.Start("http://www.google.com");
}
private void linkLabel2_LinkClicked(object sender,
LinkLabelLinkClickedEventArgs e)
{
linkLabel1.LinkVisited = true;
linkLabel1.Text = "notepad";
System.Diagnostics.Process.Start("notepad");
}
72
- Name- nume;
- Visible- vizibilitate;
- Width laimea;
- Heigth- inalimea;
- BorderStyle = BorderStyle FixedSingle- tipul chenarului ;
- PasswordChar- pentru introducerea parolei, textul este nlocuit cu un caracter ales
de utilizator;
Aplicaie:Realizai o aplicaie care conine dou cmpuri de editare username i parola,
dou etichete care au textul username i parola, un control button i un pictureBox. Iniial
imaginea i eticheta parola nu sunt vizibile. Dac parola este corect, se afieaz
imaginea la apsarea pe buton. Dup introducerea username i apasarea tastei Down
apare eticheta parola.
- Se aduc pe forma controale menionate n enun;
- n contructorul formei se mascheaz parola i se seteaz ca nevizibile controalele
imagine i eticheta parola ;
textBox1.PasswordChar = '*';
pictureBox1.Visible = false;
label1.Visible = false;
- Se trateaz evenimentul click al butonului:
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "camil")
{
pictureBox1.Visible = true;
}
}
Aplicaie:Realizai o aplicaie care conine un cmp de editare cu mai multe linii
(multiline), un buton. La evenimentul click al butonului se afieaza pe rnd liniile din
cmpul de editare.
- Se aduc pe form controalele textbox, button;
73
- Se seteaz proprietatea multiline a cmpului de editare la valoarea true;
- Se trateaz evenimentul click al butonului:
private void button1_Click(object sender, EventArgs e)
{
string[] s = textBox1.Lines;
foreach (string line in s)
{
MessageBox.Show(line);
}
3.5 Controalele RadioButton, CheckBox
Butonul radio este folosit atunci cnd trebuie s se fac o singur alegere ntre mai
multe opiuni, iar acele opiuni se exclud reciproc. Butoanele radio nu pot fi puse direct
pe form. Ele se grupeaz ntr-un control container, de exemplu GroupBox. n acest
container ele devin coerente din punct de vedere logic, n sensul c un singur buton poate
fi selectat la un moment dat.
Butonele de validare (checkbox-urile) permit utilizatorului sa aleag una sau mai
multe opiuni.
Metode
- Checked eveniment care indic dac controlul este selectat;
Aplicaie: Realizai un test gril cu itemi la alegere. Aplicaia conine trei etichete label a
crui text va avea ca valoare ntrebarea, trei grupe de radiobuton al cror proprietate text
indic posibile rspunsuri, iar un buton va afia rezultatul atunci cnd executm click.
- Aducem pe form controalele din enun;
- Introducem ca valoarea textului pentru controalele label enunurile problemelor;
- Tratm evenimentele CheckedChanged ale butoanelor radio:
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{ s1 = 0;//raspuns incorect}
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{ s1 = 1;//raspuns corect }
private void radioButton3_CheckedChanged(object sender, EventArgs e)
74
{ s1 = 0; }
private void radioButton4_CheckedChanged(object sender, EventArgs e)
{ s2 = 0; }
private void radioButton5_CheckedChanged(object sender, EventArgs e)
{ s2 = 1; }
private void radioButton6_CheckedChanged(object sender, EventArgs e)
{ s2 = 0;}
private void radioButton7_CheckedChanged(object sender, EventArgs e)
{ s3 = 0;}
private void radioButton8_CheckedChanged(object sender, EventArgs e)
{ s3 = 1; }
private void radioButton9_CheckedChanged(object sender, EventArgs e)
{ s3 = 0; }
Tratm evenimentul click al obiectului button care afieaz rezultatul:
private void button1_Click(object sender, EventArgs e)
{
s= (s1 + s3 + s2)*3+1;//calculam nota
MessageBox.Show("NOTA ESTE"+s.ToString());
}
Aplicaie: Realizai o aplicaie n care Maria i poate alege un singur profil pentru
facultate i mai multe centre universitare. Aducem pe form controalele grupbox i trei
radiobuton ale cror valoare text va reprezent profilul i trei checkbox ale cror valoare
a textului va fi centrul universitar. Mai aducem i un button i tratm evenimentul click.
private void button1_Click(object sender, EventArgs e)
{
String s = "maria s-a inscria la profilul";
if (radioButton1.Checked) s = s + radioButton1.Text;
if (radioButton2.Checked) s = s + radioButton2.Text;
if (radioButton3.Checked) s = s + radioButton3.Text;
s = s + "la facultatile din";
75
if (checkBox1.Checked) s = s + checkBox1.Text;
if (checkBox2.Checked) { s = s + " "; s = s + checkBox2.Text; }
if (checkBox3.Checked) { s = s + " "; s = s + checkBox3.Text; }
MessageBox.Show(s);
}
78
3.8 Controlul PictureBox
Controlul PictureBox este utilizat pentru a afia imagini n formate bitmap, GIF,
icoan, sau JPEG.
Proprieti :
- Image- se seteaz pentru afiarea imaginilor;
- SizeMode seteaz modul de afiare a imaginilor. Are valorile: AutoSize,
CenterImage, Normal (Locuri n stnga-sus al imaginii de la partea superioar),
StretchImage
Metode:
- Load afieaz imginea la ncrcare;
- SetBounds seteaz limitele controlului la o anumit locaie i la anumite
dimensiuni.
Evenimente :
- Paint se declaneaz cnd controlul trebuie redesenat;
- drag enter- se declaneaz cand ncepe tragerea;
- drag and drop- se declaneaz la glisarea i fixarea controlului;
- drag leave- se declaneaz cnd obiectul este tras i lsat;
- drag over- se declaneaz cnd obiectul este tras peste control.
- Paint-permite desenarea obievtelor grafice
Aplicaie ( Drag and drop1). ntr-o aplicaie Windows, drag and drop este o operaie
comun efectuat de ctre utilizatori pentru mutarea sau copierea de date de la o control
la un alt control. n cele mai multe cazuri, aceste date pot fi text simplu, dosar, imagine,
un fiier de muzic sau poate fi chiar un obiect OLE. Tehnologia Microsoft NET. are
multe evenimente i metode prin care un programator poate implementa drag and drop n
aplicaii. Realizai o aplicaie simpl, care trage o imagine peste o alt imagine. Aceasta
se realizeaz cu ajutorul evenimentelor DragEnter , DragDrop , i MouseDown.
using System;
using System.Data;
using System.Drawing;
using System.Text;
79
using System.Windows.Forms;
namespace WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent(); pictureBox2.AllowDrop = true;
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (pictureBox1.Image == null) return;
if (DoDragDrop(pictureBox1.Image, DragDropEffects.Move) ==
DragDropEffects.Move)
{
pictureBox1.Image = null;
}
}
private void pictureBox2_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Bitmap))
e.Effect = DragDropEffects.Move;
}
private void pictureBox2_DragDrop(object sender, DragEventArgs e)
{
pictureBox2.Image = (Bitmap)e.Data.GetData(DataFormats.Bitmap);
}
}
}
80
Aplicaie: S se deseneze peste un control PictureBox o elips i un string.La
declanarea evenimentului Paint se execut codul de mai jos:
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
81
Framework Components clasa Timer din spaiul de nume System Timer. Un tip
ceas apare n toolbox. Este un control mai precis.
Metode:
- Start()- pornete contorul;
- Stop()- opreste contorul;
Evenimente:
- Tick pentru primul Timer i Elepsed declaneaz un eveniment;
Aplicaie(timer deplasare imagine):Realizai o aplicaie care s deplaseze un control
PictureBox.
1. Pe suprafaa de lucru se aduc controalele: Timer, Button, Picture.
2. Proprietatea Text a controlului Button se seteaz la valoarea start;
3. Tratm evenimetul click al controlului button :
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
4. Declarm un cmp privat nr care contorizeaz numrul de evenimente tick ale
contorului
5. Tratm evenimentul Tick al controlului Timer:
private void timer1_Tick(object sender, EventArgs e)
{
nr++;
if (nr == 10)
timer1.Stop();
int a = pictureBox1.Location.X+10;
int b = pictureBox1.Location.Y;
pictureBox1.Location = new Point(a, b);
}
Aplicaie: S se realizeze un test gril, folosind itemi la alegere. Timpul testrii se va
limita la o valoare dat;
82
Rezolvare :
1. Se plaseaz pe suprafaa de lucru controalele: GoupBox, radioButton (3), label,
timer;
2. Valoarea proprieii text al lebel-lui va fi enunul problemei;
3. Valorile proprieii text ale radioButton vor fi posibile rspunsuri;
4. Vor fi declarate cmpurile private nr (contorul de evenimente tick) i s (nota);
5. Tratm evenimetele click al obiectului radiobutton :
private void radioButton1_CheckedChanged(object sender, EventArgs e)
{ s = 1; }
private void radioButton2_CheckedChanged(object sender, EventArgs e)
{ s = 10; }
private void radioButton3_CheckedChanged(object sender, EventArgs e)
{ s = 1;}
6. Tratm evenimentul tick al controlului Timer:
private void timer1_Tick(object sender, EventArgs e)
{
t++;
if(t==6)
{timer1.Stop();
groupBox1.Visible=false;
MessageBox.Show("ati luat nota" + s.ToString());
}
}
Aplicaie: Realizai o aplicaie care utilizeaz un contor timer care are eveniment tick.
Progresul procesului se realizez cu o bar de progres.
Rezolvare:
1. Se aduc pe suprafaa de lucru controalele: timer, progrebar, button;
2. Se seteaz valorile proprietilor: interval pentru timer i pentru progresbar (step,
minimumSize, maximumSize);
3. Tratm evenimentul Tick al controlului timer:
83
private void timer1_Tick(object sender, EventArgs e)
{
nr++;
if (nr == 20)
{
timer1.Stop();
progressBar1.Visible = false;
}
else
progressBar1.PerformStep();
}
84
pictureBox1.Image = imageList1.Images[nr % 6];
nr++;
}
Aplicaie: S se realizeze o aplicaie care conine o surs de imagini ImageList. Imaginile
se vor afia pe rnd ntr-un control PictureBox. Imaginile se vor afia automat la un
interval de timp folosind un control Timer.
1. Se aduc pe suprafaa formei controalele ImageList, PictureBox, Button, Timer;
2. Se apas pe sageata mic drepta sus a controlului ImageList. Se seteaz
dimensiunea i adncimea culorii;
3. Alegei Choose Images. n editorul coleciilor de imagini adugati imaginile;
4. Declarai un cmp privat nr;
5. Vom scrie n cmpul text al butonului valoarea start i vom trata evenimentul
click pentru button:
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
6. Vom trata evenimentul Tick al controlului Timer:
private void timer1_Tick(object sender, EventArgs e)
{
pictureBox1.Image = imageList1.Images[nr & 5];
nr++;
}
85
- AllowColumnReorder- permite utilizatorului se rearanjeze coloanele;
- GridLines- dac este setat la valoarea true, atunci se afieaz liniile de gril;
- FullRowSelect- selecteaz rndul;
- Sorting- sorteaz n ordine cresctoare;
- ListView1.LargeImageList = imageListLarge- seteaz o imagine;
Exemplu: S se creeze un obiect ListView care afieaz datele unor elevi (nume,
prenume, localitate domiciliu, not).
private void Form1_Load(object sender, EventArgs e)
{
ListView lista = new ListView();creaz obiectul ListView
lista.Bounds = new Rectangle(new Point(10, 10), new Size(300, 200));
lista.View = View.Details;
lista.LabelEdit = true;
lista.AllowColumnReorder = true;
lista.CheckBoxes = true;
lista.FullRowSelect = true;
lista.GridLines = true;
lista.Sorting = SortOrder.Ascending;
ListViewItem rand1 = new ListViewItem("1");//creaz un rnd
rand1.Checked = true;
rand1.SubItems.Add("radu");//creeaz o celul
rand1.SubItems.Add("popa");
rand1.SubItems.Add("ploiesti");
rand1.SubItems.Add("9");//adaug la colecie
ListViewItem rand2 = new ListViewItem("2", 1);
rand2.SubItems.Add("doru");
rand2.SubItems.Add("maria");
rand2.SubItems.Add("bucuresti");
rand2.SubItems.Add("10");
lista.Columns.Add("nr_ctr", -2, HorizontalAlignment.Left);//creeaz antetul,
86
lista.Columns.Add("nume", -2, HorizontalAlignment.Left);
lista.Columns.Add("prenume", -2, HorizontalAlignment.Left);
lista.Columns.Add("localitate", -2, HorizontalAlignment.Left);
lista.Columns.Add("medie", -2, HorizontalAlignment.Center);
lista.Items.AddRange(new ListViewItem[] { rand1, rand2 });//insereaz in list
rndurile construite.
this.Controls.Add(lista);
}
87
TreeNode controale = new TreeNode("controale");
TreeNode PictureBox1 = new TreeNode("PictureBox1 ");
TreeNode baze_date = new TreeNode("baze_date ");
TreeNode ado = new TreeNode("ado ");
TreeNode xml = new TreeNode("xml ");
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
TreeNode tNode;
tNode = treeView1.Nodes.Add("poo"); //nodul rdcin
tNode.ForeColor = Color.Green;
treeView1.Nodes[0].Nodes.Add(clase);//descendent al nodului poo
treeView1.Nodes[0].Nodes[0].Nodes.Add(definire);//descendent al nodului clase
treeView1.Nodes[0].Nodes[0].Nodes.Add(mostenire);
mostenire.BackColor = Color.Gold;//proprietate a nodului mostenire, culore
fundal
treeView1.Nodes[0].Nodes.Add(controale);
treeView1.Nodes[0].Nodes[1].Nodes.Add(PictureBox1);
treeView1.Nodes[0].Nodes.Add(baze_date);
treeView1.Nodes[0].Nodes[2].Nodes.Add(ado);
treeView1.Nodes[0].Nodes[2].Nodes.Add(xml);
}
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(treeView1.SelectedNode.FullPath.ToString());
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
88
{
if (treeView1.SelectedNode == xml)
{
Form2 f2 = new Form2();
f2.ShowDialog();
}
}
}}
89
- Play()- pornete media;
- Stop() oprete redare media;
- Pause()- face o pauz de redare;
- Open() - deschide URL pentru redare media;
- URL() ncarc fiierul ales de utilizator.
Aplicaie: S se realizeze o aplicaie care folosete un obiect WindowsMediaPlayer,
butoane pentru operaiile de ncrcare, play, oprire fiiere media i OpenFileDialog.
Se aduc pe form controalele menionate n enun, iar codul pentru evenimetele click ale
butoanelor este:
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
w.settings.autoStart = false;
w.URL = openFileDialog1.FileName;
}
}
private void button2_Click(object sender, EventArgs e)
{
w.Ctlcontrols.play();
}
private void button3_Click(object sender, EventArgs e)
{
w.Ctlcontrols.stop();
}
90
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApplication61
{
public partial class Form1 : Form
{
Button[] vb = new Button[12];
int [] v = new int [11];
string s;
string[] x;
public int n;
int l1 = 0, p = 1, lmax = 0, pmax = 1,i;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader("TextFile1.txt");
s = sr.ReadLine();
x = s.Split(' ');
n = x.Length;
for ( i = 0; i < x.Length; i++)
v[i]=int.Parse (x[i]);
for ( i = 0; i < n; i++)
{
91
vb[i] = new Button();
vb[i].Location = new Point( 100 + 40 * i,100);
vb[i].Height = 30;
vb[i].Width = 30;
vb[i].Text = x[i];
vb[i].BackColor = Color.Blue;
this.Controls.Add(vb[i]);
}
MessageBox.Show(n.ToString());
}
private void button2_Click(object sender, EventArgs e)
{
for (int i = pmax + 1; i <= pmax + lmax; i++)
vb[i].BackColor = Color.Red;
}
private void button3_Click(object sender, EventArgs e)
{
timer1.Start(); i = 0;
}
private void timer1_Tick(object sender, EventArgs e)
{
i++;
if (i>=n)
timer1.Stop();
else
if (v[i] > 0)
{
vb[i].BackColor = Color.Brown;
//Thread.Sleep(300);
l1++;
92
}
else
{
if (l1 > lmax)
{
lmax = l1;
pmax = p;
}
l1 = 0; p = i;
}
if (l1 > lmax)
{
lmax = l1;
pmax = p;
}
}
}
}
2. Se d un graf neorientat. S se determine toate lanurile de lungime L.
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
93
public RadioButton[] v = new RadioButton[10];
public int n = 0, a = 0, b = 0, c = 0, d = 0, x, y;
public int[,] ma = new int[9, 9];
public Form1()
{
InitializeComponent();
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
n++;
v[n] = new RadioButton();
v[n].Location = new Point(e.X, e.Y);
v[n].Text = n.ToString();
this.Controls.Add(v[n]);
}
private void button1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics();
Pen p = new Pen(Color.Red, 1);
for (int i = 1; i <= n; i++)
if (v[i].Checked)
if (a == 0 && b == 0)
{
a = v[i].Location.X + 5;
b = v[i].Location.Y + 5;
x = i;
}
else
{
c = v[i].Location.X + 5;
94
d = v[i].Location.Y + 5;
g.DrawLine(p, a, b, c, d);
a = 0; b = 0; c = 0; d = 0;
y = i;
ma[x, y] = 1; ma[y, x] = 1;
}
}
private void button2_Click(object sender, EventArgs e)
{
int L = int.Parse(textBox1.Text);
Graphics g1 = this.CreateGraphics();
// Pen p1 = new Pen(Color.Olive );
back1 ob = new back1(n, ma, v);
ob.back(1,L, g1);
// ob.afis();
}
}
class back1
{
public RadioButton[] v1 = new RadioButton[10];
public int n1, K = 0;
public int[,] a1 = new int[9, 9];
public int[] st = new int[7];
public back1(int n, int[,] a, RadioButton[] v)
{
n1 = n;
a1 = a;
v1 = v;
}
public void init(int K)
95
{
st[K] = 0;
}
public bool succ(int K)
{
if (st[K] < n1)
{
st[K]++;
return true;
}
else return false;
}
public bool valid(int K)
{
bool ev;
ev = true;
for (int i = 1; i <= K - 1; i++)
if (st[i] == st[K])
ev = false;
if ((K > 1) && (a1[st[K - 1], st[K]] == 0))
ev = false;
return ev;
}
public bool sol(int K, int L)
{
return (K == L);
}
public void tipar(int K, Graphics g)
{
Pen p1 = new Pen(Color.Black, 1);
96
Pen p2 = new Pen(Color.Yellow,1);
int i;
Thread.Sleep(3000);
for (i = 1; i <=K-2; i++)
{
int a5 = v1[st[i]].Location.X + 5;
int b = v1[st[i]].Location.Y + 5;
int c = v1[st[i+1]].Location.X + 5;
int d = v1[st[i+1]].Location.Y + 5;
g.DrawLine(p1, a5, b, c, d);
Thread.Sleep(1000);
}
Thread.Sleep(1000);
for (i = 1; i < n1-1; i++)
{
int a4 = v1[st[i]].Location.X + 5;
int b4 = v1[st[i]].Location.Y + 5;
int c4 = v1[st[i + 1]].Location.X + 5;
int d4 = v1[st[i + 1]].Location.Y + 5;
g.DrawLine(p2, a4, b4, c4, d4);
}
}
public void back(int K, int L, Graphics g)
{
if (K==L+1)
{
tipar(K, g);
}
else
{
97
init(K);
while (succ(K))
if ((valid(K)))
back(K + 1, L,g);
}
}
}
}
3. Realizai un test format din itemi cu alegere dual (de tip adevrat-fals).
Utilizatorul alege numrul de itemi i realizeaz un fiier text cu ntrebrile i
rspunsurile. Programul alege aleator itemii, afieaz textul i la sfrit afiseaz
rezultatul.
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections.ObjectModel;
namespace test_check
{
public partial class Form1 : Form
{
int i, j, ok,x,n,nr=0;
int[] v = new int[10];
CheckBox[] c = new CheckBox[10];
Collection<intreb> intrebare = new Collection<intreb>();
public Form1()
{
98
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{n=int.Parse (textBox1.Text );
StreamReader f = new StreamReader("TextFile1.txt");
while (!f.EndOfStream)
{
intreb a = new intreb();
a.test = f.ReadLine();
a.raspuns = f.ReadLine();
intrebare.Add(a);
}
Random r = new Random();
i = 0;
while (i <= 3)
{
x = r.Next(intrebare.Count ()); ok = 1;
for (j = 0; j <= i; j++)
if (v[j] == x)
ok = 0;
if (ok == 1)
v[i] = x;
i++;
}
for (i = 0; i < n; i++)
{
c[i] = new CheckBox();
c[i].Text = intrebare[v[i]].test;
c[i].Location = new Point(40, 70 + i * 20);
this.Controls.Add(c[i]);
99
}
}
private void button2_Click(object sender, EventArgs e)
{
for (i = 0; i < n; i++)
{
if (c[i].Checked && intrebare[v[i]].raspuns == "da")
nr++;
}
MessageBox.Show(nr.ToString());
}
}
public class intreb
{
public string test, raspuns;
}
}
4. Realizai un test format din itemi de completare. Utilizatorul alege numrul de
itemi i realizeaz un fiier text cu ntrebrile i rspunsurile. Fiierul poate fi
memorat oriunde pe suport de memorie extern. Programul alege aleator itemii ,
afieaz textul i la sfrit afieaz rezultatul.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
100
using System.Collections.ObjectModel;
namespace WindowsFormsApplication7
{
public partial class Form1 : Form
{
Collection<intr> intrebare = new Collection<intr>();
int[] v = new int[9];
int i, x, ok, j, nr = 0;
TextBox[] t = new TextBox[5];
Label[] l = new Label[5];
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
Random r = new Random();
i = 0;
while (i <= 3)
{
x = r.Next(7); ok = 1;
for (j = 0; j <= i; j++)
if (v[j] == x)
ok = 0;
if (ok == 1)
101
v[i] = x;
i++;
}
StreamReader f1 = new StreamReader("TextFile1.txt");
while (!f1.EndOfStream)
{
intr a = new intr();
a.test = f1.ReadLine();
a.raspuns = f1.ReadLine();
intrebare.Add(a);
}
for (i = 0; i <= 3; i++)
{
t[i] = new TextBox();
t[i].Location = new Point(100, 120 + i * 40);
this.Controls.Add(t[i]);
l[i] = new Label();
l[i].Text = intrebare[v[i]].test;
l[i].Location = new Point(100, 100 + i * 40);
this.Controls.Add(l[i]);
}
}
private void button3_Click(object sender, EventArgs e)
{
for (i = 0; i <= 3; i++)
if (t[i].Text == intrebare[v[i]].raspuns)
nr++;
MessageBox.Show(nr.ToString());
}
}
102
public class intr
{
public string test, raspuns;
}
}
5. Folosind controlul RichTextBox s se editeze un test i baremul de corectare.
ntrebrile sunt alese aleator de program dintr-un fiier text.
using System;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.ObjectModel;
using System.IO;
namespace WindowsFormsApplication27
{
public partial class Form1 : Form
{
Collection<intr> intrebare = new Collection<intr>();
int[] v = new int[9];
int i, x, ok, j;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
richTextBox1.AppendText(listBox1.Text + " LA " + listBox2.Text + '\n');
}
103
private void button2_Click(object sender, EventArgs e)
{
Random r = new Random();
i = 0;
while (i <= 3)
{
x = r.Next(7); ok = 1;
for (j = 0; j <= i; j++)
if (v[j] == x)
ok = 0;
if (ok == 1)
v[i] = x;
i++;
}
StreamReader f = new StreamReader("TextFile1.txt");
while (!f.EndOfStream)
{
intr a = new intr();
a.test = f.ReadLine();
a.raspuns = f.ReadLine();
intrebare.Add(a);
}
for (j = 1; j <= i; j++)
richTextBox1.AppendText(intrebare[v[j]].test+'\n');
}
public class intr
{
public string test, raspuns;
}
private void button3_Click(object sender, EventArgs e)
104
{
richTextBox1 .AppendText ("BAREM DE CORECTARE"+'\n');
for (j = 1; j <= i; j++)
richTextBox1.AppendText("raspuns corect "+intrebare[v[j]].raspuns+" 1p " +
'\n');
}
private void button4_Click(object sender, EventArgs e)
{
if (fontDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
richTextBox1.SelectionFont = fontDialog1.Font;
}
private void button5_Click(object sender, EventArgs e)
{
richTextBox1.SelectionBullet = true;
}
}
}
6. Se consider un triunghi de numere naturale format din n linii. Pe prima linie se
afla un numr, pe a doua dou numere, pe linia n se afl n numere. Cu ajutorul
acestui triunghi se pot forma sume de numere naturale. n felul urmtor:
- Se pornete de la linia 1
- Succesorul unui numr se gsete pe linia urmtoare sub el sau pe diagonal la
dreapta
Care este cea mai mare sum care se poate obine.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
105
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication9
{
public partial class Form1 : Form
{ Button[,] a = new Button[7, 7];
int[,] b = new int[7,7];
public int s = 0,i,n;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
n = int.Parse(textBox1.Text);
for(int i=1;i<=n;i++)
for (int j = 1; j <= i; j++)
{
Random r = new Random();
int x = r.Next(34);
b[i, j] = x;
a[i, j] = new Button();
a[i, j].Location = new Point(100 + i * 40, 100 + j * 40);
a[i, j].Height = 35;
a[i,j].Width =35;
a[i, j].BackColor = Color.Gray;
a[i, j].Text = b[i,j].ToString ();
this.Controls.Add(a[i, j]);
}
}
106
private void button2_Click(object sender, EventArgs e)
{
timer1.Start();
i = -1;
s = s + b[1,1];
}
private void timer1_Tick(object sender, EventArgs e)
{
if (i == n-1 )
timer1.Stop();
else
{i++;
if(b[i+1,i]>b[i+1,i+1])
{s+=b[i+1,i];
a[i+1,i].BackColor =Color .Lime;
}
else
{s+=b[i+1,i+1];
a[i+1,i+1].BackColor =Color .Lime;
}
}
MessageBox.Show(s.ToString());
}
}
}
7. Folosind limbajul C# s se realizeze un cronometru analogic.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
107
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace cronometru
{
public partial class Form1 : Form
{
float unghi = 0;float r1=200F,r2=150F;
const float PI = 3.141592654F;
public Form1()
{
InitializeComponent();
}
109
Form1_Load(sender, e);
}
private void button3_Click(object sender, EventArgs e)
{
timer1.Stop();
}
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
MessageBox.Show(e.X.ToString() + " " + e.Y.ToString());
}
}
}
8. O albin trebuie s ajung la o floare. Ea i-a pierdut simul orientrii i de aceea
Mihai trebuie s o dirijeze din tastele de daplasare.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication17
{
public partial class Form1 : Form
{
bool up1, down1, left1, right1;
int a, b;
public Form1()
110
{
InitializeComponent();
KeyDown += new KeyEventHandler(Form1_KeyDown);
this.KeyPreview = true;
b = pictureBox2.Location.Y;
a= pictureBox2.Location.X ;
timer1.Start();
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
{
down1 = false;
up1 = false;
right1 = false;
left1 = true;
break;
}
case Keys.Right:
{
down1 = false;
up1 = false;
right1 = true;
left1 = false;
// MessageBox.Show("Right");
}
break;
case Keys.Down:
111
{
down1 = true;
up1 = false;
right1 = false;
left1 = false;
} break;
case Keys.Up:
{
down1 = false;
up1 = true;
right1 = false;
left1 = false;
} break;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (down1)
{
b = pictureBox2.Location.Y - 10;
pictureBox2.Location = new Point(a, b);
}
if (up1)
{
b = pictureBox2.Location.Y + 11;
pictureBox2.Location = new Point(a, b);
}
if (right1)
{
a = pictureBox2.Location.X - 11;
112
pictureBox2.Location = new Point(a, b);
}
if (left1)
{
a = pictureBox2.Location.X + 11;
pictureBox2.Location = new Point(a, b);
}
if (pictureBox2.Bounds.IntersectsWith(pictureBox1.Bounds))
{ timer1.Stop(); MessageBox.Show("gasit"); }
}
}
}
113
6. Aplicaia conine o singur form care are n ea un buton standard i o caset de
editare. n faza de proiectare caseta de editare are setat
proprietateaPasswordChar la caracterul '*'. n faza de execuie, la click pe buton
se va afia un mesaj de acceptare sau de respingere (funcia MessageBox.Show)
dup cum textul din caseta de editare (editat manual n prealabil, dar invizibil,
toate caracterele sale fiind nlocuite cu *) este sau nu egal cu un text fixat.
7. Aplicaia conine o singur form care are n ea un grup radio, un buton, un cmp
de editare. n faza de proiectare, grupul radio nu are butoane. n faza de execuie,
la click pe primul buton se va adug un nou buton grupului radio, cu textul ataat
identic cu textul casetei de editare.
8. Se d un graf neorientat. S se realizeze un program care afieaz tote ciclurile
euleriene.
9. Se d un vector cu n elemente numere ntregi. Realizai o aplicaie care sorteaz
vectorul.
4 CLASA GRAPHICS
Cu ajutorul acestei clase se realizez desene grafice. Clasa definete o suprafa de
desenare. Metodele sale deseneaz pe aceast suprafa, iar biblioteca GDI+ tie sa
trimit imaginea pe dispozitivul grafic (monitor, imprimant sau altceva).
Desenarea se realizeaz n doua moduri:
Prin intermediul evenimentului Paint al obiectelor;
Cu ajutorul metodei CreateGrphics(), motenit de ctre toate controalele de la
clasa de baz Control
4.1 Principalele metode ale clasei Graphics
DrawEllipse()-Deseneaz o elips specificat printr-un dreptunghi care o mrginete
Sintaxa: DrawEllipse(penia, dreptunghi);- unde dreptunghi-dreptunghiul n care se
nscrie elipsa;
Exemplu:
Pen penita= new Pen(Color.Red, 1);
RectangleF dreptunghi = new RectangleF(0.0F, 0.0F, 200.0F, 100.0F);
114
e.Graphics.DrawEllipse(penita, dreptunghi);
DrawLine()- Deseneaz un segment specificat prin capetele sale.
Sintaxa: DrawLine (penia, punct1, punct2);- unde punct1, punct2 reprezint
coordonatele punctelor .
Exemplu:
Pen penita= new Pen (Color.Black, 3);
PointF punct1 = new PointF (100.0F, 100.0F);
PointF punct2 = new PointF (500.0F, 100.0F);
e.Graphics.DrawLine (penita, punct1, punct2);
DrawRectangle()-Deseneaz un dreptunghi.
Sintaxa: DrawRectangle(penita, dreptunghi);
Exemplu:
Pen penita = new Pen(Color.Black, 3);
Rectangle dreptunghi = new Rectangle(0, 0, 200, 200);
e.Graphics.DrawRectangle(penita, dreptunghi);
DrawImage()- Deseneaz o imagine la o locaie dat
Sintaxa: DrawImage(imagine, dreptunghi);
Unde imagine este imaginea pe care o desenm i are sintaxa:
image imagine = Image.FromFile("imagine.jpg");
Exemplu:
Image newImage = Image.FromFile("SampImag.jpg");
Rectangle destRect = new Rectangle(100, 100, 450, 150);
e.Graphics.DrawImage(newImage, destRect);
DrawArc()-Deseneaz un arc de elips.
Sintaxa: DrawArc (penia, dreptunghi, nceputunghi, sfritunghi);
Exemplu:
Pen penita = new Pen (Color.Black, 3);
Rectangle dreptunghi = new Rectangle(0, 0, 100, 200);
float inceputunghi = 45.0F;
float sfarsitunghi = 270.0F;
115
e.Graphics.DrawArc(penia, dreptunghi, inceputunghi, sfarsitunghi);
RotateTransform- rotete un obiect cu o valoare a unghiului;
Sintaxa : RotateTransform(unghi);
Clear()-Cur suprafaa de desenare i o umple cu o culoare de fundal.
5. FISIERE XML
Fiierele XML sunt fiiere text a cror date sunt structurate arborescent cu ajutorul
tagurilor. Tagurile nu sunt predefinite. Informaiile sunt cuprinse ntre aceste taguri.
Exemplu :<nume>popa</nume>
Observaii:
XML este case sensitive;
Tag-urile trebuie s fie nchise n ordinea invers n care au fost deschise
C# ofer clase pentru operaiuni cum ar fi: citire, scriere. Aceste clase sunt stocate
n spaiile de nume: System.Xml, System.Xml.Schema, System.Xml.Serialization,
System.Xml.XPath, System.Xml.Xsl. Clasele care lucreaz cu XML se gsesc n spaiul
de nume System,XML. Exemplu de fiier XML
<?xml version="1.0" encoding="utf-8"?>
<element>
<elev>
<nume>popa</nume>
<prenume>irina</prenume>
<clasa>12b</clasa>
<profil>matematica-informatica</profil>
</elev>
</element>
5.1 Clasa XMLDocument
Aplicaie: S se realizeze o machet care insereaz ntr-un fiier XML datele elevilor
(nume, prenume, clasa, profil, data naterii).
using System;
using System.Data;
118
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;
namespace WindowsFormsApplication27
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string path = "XMLFile1.xml";
XmlDocument doc = new XmlDocument();
if (!System.IO.File.Exists(path))
{
MessageBox.Show("lmge;lm");
XmlDeclaration declaration = doc.CreateXmlDeclaration("1.0", "UTF-8",
"yes");
XmlComment comment = doc.CreateComment("This is an XML Generated
File");
doc.AppendChild(declaration);
doc.AppendChild(comment);
}
else {
doc.Load(path); MessageBox.Show("rau");
}
XmlElement root = doc.DocumentElement;
119
XmlElement Subroot = doc.CreateElement("elev");
XmlElement nume = doc.CreateElement("nume");
XmlElement prenume = doc.CreateElement("prenume");
XmlElement clasa = doc.CreateElement("clasa");
XmlElement profil = doc.CreateElement("profil");
XmlElement datanasterii = doc.CreateElement("datanasterii");
nume.InnerText = textBox1.Text;
prenume.InnerText = textBox2.Text;
clasa.InnerText = textBox3.Text;
profil.InnerText = listBox1.Text;
datanasterii.InnerText = monthCalendar1.Text;
Subroot.AppendChild(nume);
Subroot.AppendChild(prenume);
Subroot.AppendChild(clasa);
Subroot.AppendChild(profil);
Subroot.AppendChild(datanasterii);
root.AppendChild(Subroot);
doc.AppendChild(root);
doc.Save(path);
MessageBox.Show("Details added Successfully");
}
}
}
120
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace WindowsFormsApplication27
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
XmlReader xmlFile;
xmlFile = XmlReader.Create("XMLFile1.xml", new XmlReaderSettings());
DataSet ds = new DataSet();
ds.ReadXml(xmlFile);
dataGridView1.DataSource = ds.Tables[0];
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
Aplicaie S se parcurg fiierul XML creat mai sus i s se creeze o list ListBox care
reine numele elevilor.
121
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
namespace WindowsFormsApplication27
{
public partial class Form2 : Form
{
XmlDocument xml = null;
XmlNodeList xnList;
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
xml= new XmlDocument();
xml.Load("XMLFile1.xml"); //
xnList = xml.SelectNodes("element/elev");
foreach (XmlNode xn in xnList)
{
string nume = xn["nume"].InnerText;
listBox1.Items.Add(nume);
}
}
122
}
}
123
}
else
{
MessageBox.Show(dv[index]["nume"].ToString());
}
}
}
}
125
6.1 Tehologia ADO.NET.
Este o tehnologie nou care este format din Biblioteci de Clase NET folosite
pentru accesarea bazelor de date.Lucrul cu bazele de date se face:
- n mod conectat. Se realizeaz conexiunea la baza de date, se fac modificrile i la
sfrit se realizeaz deconectarea. Dac sunt muli utilizatori care lucraz
simultan, serverul este ngreunat.
- n mod deconectat. Se ncarc baza de date ntr-o structur de date dataset care
este fiier XML, se produc modificrile n dataset i la sfrit se transmit bazei de
date. Dac baza de date este mare i spaiul de memorie (memorie RAM) este
insuficient, lucrul n mod deconectat este dificil.
126
- Clasa DataSet- Folosit pentru lucrul n mod deconectat, stocheaz date local,
modific datele i retransmite date la baza de date folosindu-se de obiecte
DataAdapter.
127
Executarea propriu-zis se face cu metoda ExecuteReader(). Aceasta face
dou lucruri: construiete un obiect reader de tip SqlDataReader i apoi
execut interogarea;
4. Accesarea rezultatelor interogrii:
Se parcurge setul de date cu metoda Read(), care la fiecare apel avanseaz
reader-ul la linia urmtoare;
Pe fiecare linie se poate accesa fiecare coloan indexat reader[3] sau
reader[nume_coloana];
Aplicaie:
1. n baza de date Database1 se creeaz tabela cri (cod,nume, autor, pret).
2. Construim o machet pentru inserarea datelor. Macheta conine patru controale
TextBox i un buton button, pentru transmiterea datelor.
using System;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace bd_conecate
{
public partial class Form1 : Form
{
SqlConnection conexiune = null;//declararea constructorului de conectare
public Form1()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
128
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{ SqlDataReader reader = null;//declararea unui obiect SqlCommand
string inserare;
inserare = @"insert into carti values ('"; inserare += textBox1.Text + "','" +
textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "')";
SqlCommand c = new SqlCommand(inserare, conexiune);//realizarea unui obiect
SqlCommand
reader = c.ExecuteReader();//executarea propriu zisa
if (c != null)
MessageBox.Show("insereaza");
conexiune.Close();// inchiderea conexiunii
conexiune.Dispose();
textBox1.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio
2010\Projects\bd_conecate\bd_conecate\Database1.mdf;Integrated Security=True;User
Instance=True");
conexiune.Open();
}
129
3. Realizai o machet care afieaz nregistrri din tabela cri cu ajutorul
interogrii select. Macheta conine patru obiecte label i un obiect buton.
Programul ataat:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace bd_conecate
{
public partial class Form3 : Form
{
SqlConnection conn = null;
public Form3()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{
130
string selectare = "SELECT * FROM carti";
SqlCommand c = new SqlCommand(selectare, conexiune);
SqlDataAdapter adapter = new SqlDataAdapter(c);
DataSet ds = new DataSet();
adapter.Fill(ds, "carti");
foreach (DataRow r in ds.Tables["carti"].Rows)
{
label1.Text = label1.Text + "\n" + r["cod"] + "\n";
label2.Text = label2.Text + "\n" + r["nume"] + "\n";
label3.Text = label3.Text + "\n" + r["autor"] + "\n";
label4.Text = label4.Text + "\n" + r["pret"] + "\n";
}
}
}
}
4. Realizai o machet care tearge din tabela cri nregistrrile crilor care au
preul introdus de utilizator ntr-un obiect TextBox:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace bd_conecate
{
public partial class Form5 : Form
{
SqlConnection conn = null;
131
public Form5()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{
SqlDataReader reader = null;
string deletesql;
deletesql = "delete from carti where pret='"; deletesql += textBox1.Text + "'";
SqlCommand cmd = new SqlCommand(deletesql, conn);
reader = cmd.ExecuteReader();
if (cmd != null)
MessageBox.Show("sterge");
conn.Close();
conn.Dispose();
}
}
}
132
dataset ds=new DataSet(numeataset);
2. Crearea adaptorului: un DataSet primete datele de la un DataDataAdaptor.
SqlDataAdapter da =new SqlDataAdapter(sql,conn);
3.ncrcarea DataSet-ului cu elementele unei tabele se face cu ajutorul metodei Fill:
Da.Fill(ds,tabela);
4.Accesarea unui table:
DataTable dt=ds.DataTable(table);
5.Accesarea rndurilor i a coloanelor:
dataRow r=dt.Row[nr];
Data Column=dt.Comlumn[nume);
6.Accesarea valorilor dintr-o tabel
Foreach( DataRow row in dt.Row)
{ foreach (DataColumn col in dt.Column)
Console.Writeine(row[col]);
}
7.Datele se propag napoi n baza de date cu ajutorul metodei update a clasei
DataAdapter;
Int Update(DataSet ds);
Int update(DataTable dt);
Aplicaie: S se realizeze tabela cri (id, nume, autor, pre). Inserarea se realizeaz cu o
machet care conine controale TextBox.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication7
133
{
public partial class Form1 : Form
{
private Database1DataSet ds = null;//declararea dataSet
private Database1DataSetTableAdapters.t1TableAdapter t=null;//declararea
adaptorului
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ds = new Database1DataSet();//crearea dataset
t = new Database1DataSetTableAdapters.t1TableAdapter();//crearea adaptorului
t.Fill(ds.t1);//umplerea Dataset cu datele din tabela
}
private void button1_Click(object sender, EventArgs e)
{
t.Insert(int.Parse(textBox1.Text),textBox2.Text);//inserarea
t.Update(ds.t1);//trasmiterea datelor in tabela
Close();
} }
}
134
Database Diagrams- Add New Diagram- se adaug tabelele i se realizeaz
legtura ntre tabele trgnd mouse-ul apsat ntre cele dou cmpuri care sunt
chei primare sau chei strine.
Comanda select
135
Comanda DELETE . tergerea unei linii dintr-un tabel se realizeaz prin comanda
DELETE.
FROM table
WHERE condiie
Comanda UPDATE Pentru modificarea valorilor existente ntr-un tabel se utilizeaz
comanda UPDATE.
UPDATE tablename / viewname
SET coloana =expresie
WHERE condiie
Aplicaie : Se d tabelul elev (id, nume, prenume, clasa, media). Cerine:
1. S se afieze clasele distincte;
2. S se afieze elevii clasei 11a sortai dup medie, descresctor;
3. S se afieze media fiecrei clase;
4. S se afieze elevii cu media cea mai mare;
5. S se tearg elevii clasei 12a;
6. S se micoreze cu 1 punct media elevilor de la 11a;
Rezolvare
1. SELECT DISTINCT clasa FROM elev
2. SELECT DISTINCT id, nume, prenume, clasa, medie FROM elev WHERE
(clasa = '11a')ORDER BY medie;
3. SELECT clasa, AVG(medie) AS medie_clasa FROM elev GROUP BY clasa;
4. SELECT DISTINCT id, nume, prenume, clasa, medie FROM elev WHERE
(medie =(SELECT MAX(medie) AS Expr1 FROM elev AS elev_1))
5. DELETE FROM elev WHERE (clasa = '12a')
6. UPDATE elev SET medie = medie 1 WHERE(clasa = '11a');
136
1. Produs cartezian- leag o nregistrare dintr-o tabel cu toate nregistrrile din
cealalt tabel
2. Equijoin sau natural join- dou tabele sunt legate printr-o relaie de egalitate
ntre cheie primar i cheie strin ( relaii 1-n) sau ntre chei primare (relaii 1-1).
Aplicaie: Se d o baz de date format din tabelele clas (id, nume) i tabela elev
(id_elev, nume, prenume, id_clasa). Realizai o interogare care afieaz elevii i clasa
din care face parte.
SELECT clasa.id, clasa.nume, clasa.prenume, clasa.id_clasa, elev.id AS Expr1,
elev.nume AS Expr2, elev.sala FROM clasa INNER JOIN elev ON clasa.id =
elev.id
3. Nonequijoin- leag elemente din mai multe tabele condiia fiind alta dect cea de
egalitate.
4. Selfjoin leag o tabel cu ea nsi;
Aplicaie: Se d tabela angajat ( id, nume, prenume, id_ef). S se afieze toi angajaii i
numele efului lor.
SELECT * FROM angajat a, angajat b where a.id=b.id_sef;
Standard ANSI
SELECT a.id, a.nume, a.prenume, a.id_sef, b.id AS Expr1, b.nume AS Expr2,
b.prenume AS Expr3, b.id_sef AS Expr4 FROM angajat AS a INNER JOIN
angajat AS b ON a.id = b.id_sef
5. Outerjoin se realizeaz legturi ntre dou tabele atunci cnd o nregistrare
dintr-o tabel nu gsete corespondena n cealalt tabel.
Aplicaie: Pentru baza de date de la punctual 2 s se afieze i clasele care nu au elevi.
select * from elev c, clasa ewhere e.id(+)=c.id_clasa;
137
Aplicatie Sa se realizeze o baz de date. Informaiile din tabel se afieaz ntr-un control
DataGridView
1. Se creeaz baza de date ;
2. Se creeaz un set de date (Dataset) n felul urmtor: din Solution Explorer, click
dreapta add- dataset. Se trage tabelul peste dataset.Se creeaz automat i un
adaptor;
3. Pentru DataGridview click pe sageat i se face legatura cu datasetul creat;
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace grid
{
public partial class Form2 : Form
{ SqlConnection conn = null;//
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
conn = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\grid\grid\Database1.mdf;Integrated
Security=True;User Instance=True");// // string connectionString = "Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\grid\grid\Database1.mdf;Integrated
Security=True;User Instance=True";
string sql = "SELECT * FROM elev";
SqlDataAdapter dataadapter = new SqlDataAdapter(sql, conn);
138
DataSet ds = new DataSet();
conn.Open();
dataadapter.Fill(ds, "elev");
conn.Close();
dataGridView1.DataSource = ds;
dataGridView1.DataMember = "elev";
}
}
}
Metode
1. Sortare dataGridView1.Sort (dataGridView1.Columns [1], ListSortDirection.
Ascending)
2. Filtrare DataView dv; dv = new DataView (ds.Tables [0], "type = 'business'",
"tip Desc", DataViewRowState.CurrentRows); dataGridView1.DataSource = dv;
Aplicaie:S se realizeze o secven de program care sorteaz, filtreaz date dintr-un
tabel, afieaz ntr-un control DataGridView
dataGridView1.DataMember = "elev"; DataView dv;
dv = new DataView(ds.Tables[0], "medie > 6", "medie Desc",dataGridView1.DataSource
= dv;
3. Adugare linii- dataGridView1.Rows.Add(row);
4. Adugare coloane- dataGridView1.Columns[Index].Visible = false;
5. Formatare- DataGridViewRow row = this.dataGridView1.RowTemplate;
row.DefaultCellStyle.BackColor = Color.Bisque;
row.Height = 35;
row.MinimumHeight = 20;
6. Adugare butoane check DataGridViewCheckBoxColumn check = new
DataGridViewCheckBoxColumn();
dataGridView1.Columns.Add(check);
7. Adugare imagine DataGridViewImageColumn imag = new
DataGridViewImageColumn ();
139
Imagine = Image.FromFile ("Calea Image");
imag.Image = imagine
dataGridView1.Columns.Add (imag);
8. Adugare link - DataGridViewLinkColumn lnk = new
DataGridViewLinkColumn();
dataGridView1.Columns.Add(lnk);
9. Printare - printDocument1.Print ();
Aplicaie: S se realizeze o aplicaie care execut urmtoarele operaii ntr-un Control
DataGridView
- creeaz rnduri i coloane;
- formateaz celulele;
- adaug imagini;
- adaug butoane check;
- adaug linkuri,
- printeaz document,
private void button2_Click(object sender, EventArgs e)
{
dataGridView1.ColumnCount = 4;
dataGridView1.Columns[0].Name = " ID";
dataGridView1.Columns[1].Name = " Name";
dataGridView1.Columns[2].Name = "prenume";
dataGridView1.Columns[2].Name = "medie";
string[] row = new string[] { textBox1.Text, textBox2.Text, textBox3.Text,
textBox4.Text };
dataGridView1.Rows.Add(row);
DataGridViewLinkColumn link = new DataGridViewLinkColumn();//adaugarea de
linkuri.
dataGridView1.Columns.Add(lnk);
link.HeaderText = "Link Data";
link.Name = "Http://csharp.net-informations.com";
link.Text = "Http://csharp.net-informations.com";
140
link.UseColumnTextForLinkValue = true;
DataGridViewImageColumn imag = new DataGridViewImageColumn();//adaugare
imagine:
Image image = Image.FromFile("Resources//Water lilies.jpg");
imag.Image = image;
dataGridView1.Columns.Add(imag);
imag.HeaderText = "Image";
imag.Name = "imag";
//adaugare butoane
DataGridViewCheckBoxColumn check = new DataGridViewCheckBoxColumn();
dataGridView1.Columns.Add(check)
dataGridView1.Rows[1].Cells[5].Value = true;
}
//Pentru formatare:
dataGridView1.RowsDefaultCellStyle.BackColor = Color.Bisque;
dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Beige;
dataGridView1.CellBorderStyle = DataGridViewCellBorderStyle.None;
dataGridView1.DefaultCellStyle.SelectionBackColor = Color.Red;
dataGridView1.DefaultCellStyle.SelectionForeColor = Color.Yellow;
dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dataGridView1.Columns[1].DefaultCellStyle.Alignment =
DataGridViewContentAlignment.MiddleRight;
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.AllowUserToResizeColumns = false;
//Pentru printare se aduce pe form printDocument1 din toolbox
private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
Bitmap bm = new Bitmap(this.dataGridView1.Width,
this.dataGridView1.Height);
141
dataGridView1.DrawToBitmap(bm, new Rectangle(0, 0,
this.dataGridView1.Width, this.dataGridView1.Height));
e.Graphics.DrawImage(bm, 0, 0);
}
private void button2_Click(object sender, EventArgs e)
{
printDocument1.Print();
}
6.8 Controlul Chart
Controlul Chart afieaz date ca un grafic sau sub form de diagram.
Proprieti :
Title- numele diagramei;
Obiectul conine mai multe obiecte Series. Proprietile obiectelor Series:
Series.ChartType tipul de diagram;
Series.Legend introduce o legend;
Series.XAxisType seteaz tipul axei X;
Series.YAxisType seteaz tipul axei Y;
Adugarea unei Series se face cu ajutorul metodei Add: Chart.Series.Add ( "Series" );
Aplicaie: Se d tabela elev (id,nume_prenume, medie). S se realizeze o aplicaie care
afieaz cu ajutorul obiectului Chart numele elevilor i mediile lor.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication12
142
{
public partial class Form1 : Form
{
SqlConnection conn = null;
public Form1()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{
string selectSQL = "SELECT * FROM elev";
SqlCommand cmd = new SqlCommand(selectSQL, conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds, "elev");
foreach (DataRow r in ds.Tables["elev"].Rows)
{this .chart1 .Series ["nume"].Points .AddXY(r["nume"],r["nota"]);
this.chart1.Series["prenume"].Points.AddXY(r["nume"], r["nota"]);
}
}
}
}
143
6.9 Proceduri stocate
O procedur stocat este o secven de instruciuni stocate pe serverul de baze de
date, care are un nume, sunt compilate o singur dat i apelate de cte ori este nevoie. O
procedur stocat cuprinde instruciuni SQL.Sintaxa este:
CREATE PROCEDURE [posesor] nume_procedura:nr
@nume_parametru tip_data [=default][output]
@nume_parametru tip_data [=default][output]
.
[FOR REPLICATION][WITH Recompile]
ENCRIPTION]
AS ..
INSTRUCIUNI SQL
RETUR
O procedur stocat poate fi apelat folosind obiectul SqlCommand:
SqlCommand cmd = new SqlCommand("procedura",conexiune);
cmd.CommandType = CommandType.StoredProcedure;
Primul parametru al constructorului este un ir de caractere ce reprezint numele
procedurii stocate. A doua instruciune de mai sus spune obiectului SqlCommand ce tip
de comand va fi executat prin intermediul proprietii CommandType.
Exemplu:Am creat o procedur procedur care afieaz toate nregistrrile tabelei elev
(id, nume, nota).
Procedura este:
ALTER PROCEDURE procedura
AS
select * from elev;
RETURN
Codul :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
144
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace WindowsFormsApplication22
{
public partial class Form1 : Form
{
SqlConnection conn = null;
public Form1()
{
InitializeComponent();
conexiune = new SqlConnection(@"Data
Source=.\SQLEXPRESS;AttachDbFilename=c:\documents and settings\ea\my
documents\visual studio 2010\Projects\bd_conecate \bd_conecate\
Database1.mdf;Integrated Security=True;User Instance=True");//realizarea conectarii
conexiune.Open();//deschidera conexinii
if (conexiune != null)
MessageBox.Show("s-a deschis");
}
private void button1_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand("florin", conexiune);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);//crearea adaptorului
DataSet ds = new DataSet();//crearea setului de date
adapter.Fill(ds, "elev");
foreach (DataRow r in ds.Tables["elev"].Rows)
{
145
label1.Text = label1.Text + "\n" + r["id"] + "\n";
label2.Text = label2.Text + "\n" + r["nume"] + "\n";
label3.Text = label3.Text + "\n" + r["nota"] + "\n";
}
}
}
}
Aplicaie proceduri stocate n mod deconectat, Fie tabela angajai (id, nume, prenume,
salariu). n mod vizual construim adapter. Din meniul Data- ShowDataSources- Edit
DataSet with Designer. Din Server Explorer glism pe suprafaa DataSet tabelul angajat
i obinem angajatTableAdapter. Pe diagrama tabelei clas din DataSet, click dreapta pe
angajatTableAdapter- Add Query, se deschide o fereastr i alegem Use SQL
Statermants- Insert. Se creeaz procedura:
ALTER PROCEDURE [dbo].ins
(
@id int,
@nume nchar(10),
@prenume nchar(10),
@salariu real
)
AS
SET NOCOUNT OFF;
INSERT INTO [dbo].[angajat] ([id], [nume], [prenume], [salariu]) VALUES (@id,
@nume, @prenume, @salariu);
SELECT id, nume, prenume, salariu FROM angajat WHERE (id = @id)
Unde (@id, @nume, @prenume, @salariu sunt parametrii de ieire.
Pe form aducem patru controale TextBox i un control Button, iar pe evenimentul
Click introducem codul:
private void button1_Click(object sender, EventArgs e)
{
146
if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "" || textBox4.Text ==
"")
MessageBox.Show("nu sunt introduse date");
else
{
angajatTableAdapter1.ins(int.Parse(textBox1.Text), textBox2.Text,
textBox3.Text, float.Parse(textBox4.Text));
angajatTableAdapter1.Fill(database1DataSet1.angajat);
Close();
}
}
Aplicaie: Fie tabela cri (cod, titlu, autor, pre). Folosind o procedur afiai numrul de
cri cu preul mai mare dect o valoare introdus de utilizator n controlul
TextBox.Procedura este:
ALTER PROCEDURE [dbo].p1
(
@pret real
)
AS
SET NOCOUNT ON;
SELECT COUNT(*) FROM carte where pret>@pret
Codul asociat evenimentului click al butonului:
private void button2_Click(object sender, EventArgs e)
{
int nr=(int)carteTableAdapter1.p1(float.Parse(textBox1.Text));
MessageBox.Show(nr.ToString());
}
Aplicaie: Fie tabela produs (id, denumire, pre, cantitate, valoare). S se tearg toate
produsele care au denumirea introdus de utilizator n controlul TextBox.
Procedura este:
147
ALTER PROCEDURE [dbo].del
(
@Original_denumire nchar(10)
)
AS
SET NOCOUNT OFF;
DELETE FROM [dbo].[produs] WHERE (denumire = @Original_denumire)
Evenimentul click al butonului:
private void button2_Click(object sender, EventArgs e)
{
produsTableAdapter1.del(textBox1.Text);
produsTableAdapter1.Fill(database1DataSet1.produs);
Close();
}
Aplicaie: Fie tabela Examen (id, nume, prenume, nota1, nota2, medie). S se
completeze automat cmpul medie.
Procedura stocat pentru calculul mediei este:
ALTER PROCEDURE [dbo].m1
AS
SET NOCOUNT OFF;
UPDATE examen
set medie=(nota1+nota2)/2
codul pentru evenimentul click al butonului:
private void button1_Click(object sender, EventArgs e)
{
examenTableAdapter1.m1();
examenTableAdapter1.Fill(database1DataSet1.examen);
}
Probleme propuse
148
1. Creai o baz de date cu numele Spital care cuprinde tabelele Pacieni (cnp,
nume, prenume, adres, venit, diagnostic, salon, id_medic) i Medici ( cnp,
nume, prenume, specializarea). Aplicaia implementeaz operaii de inserare n
tabele, stergere de nregistrti, modificare de valori ale unor nregistrri, afisare
de date din baza de date.
2. Creai o baz de date cu numele Muzic care cuprinde tabelele: muzician ( id,
nume, prenume, data_naterii, formaia) i albume) id, titlu, data_apatiiei, pret,
id_muzician). Aplicaia implementeaz operaii de inserare n tabele, stergere
de nregistrti, modificare de valori ale unor nregistrri, afisare de date din
baza de date.
Bibliografie
1. Charles Petzold- "Programare n Windows cu C#", Teora, 2003
2. Herbert Schildt -"C#", Teora, 2002
3. Constantin Glan, Susana Glan- Programare n Visual C#, L&S Infomat,
2008
149
4. Ana ntuneric, Cristina Sichim, Daniela Taras- Aplicaii Windows Visual n C#,
Polirom, 2010
5. Jon Jagger "C# Programming Course"
www.jaggersoft.com/csharp_course/index.html
6. Documentaia online MSDN pentru mediul vizual de dezvoltare Microsoft Visual
Studio (varianta C#)
7. Ileana Popescu, Letiia Velcescu- Proiectarea Bazelor de Date, Editura Universitii
din Bucureti, 2007
8. Marin Fotache "SQL", Editura Polirom, 2009
9. Carmen Popescu Manual de Informatic clasa a XII-a, Editura L&S Infromat,
2007
10. C# Station ADO.NET Tutorial http://www.csharp-station.com/Tutorial/AdoDotNet
11. Sorin Cristea- Curriculum Pedagogic, Editura Didactic i Pedagogic, 2006
12. SINGER Mihaela (Coord.), SARIVAN Ligia (Coord. Volum) "Ghid metodologic
pentru educaie tehnologic, informatic, tehnologia informaiei: Liceu Teoretic",
Editura S.C. Aramis Print S.R.L., Bucureti, 2001
13. MASALAGIU Cristian, ASIMININOAEI Ioan -"Didactica predrii informaticii",
Editura Polirom, Iai, 2004
14. MASALAGIU Cristian , ASIMINOAEI Ioan, Maxim Ioan -"Metodica predrii
informaticii, Editura Matrix Rom, Bucureti", 2001
15. Mihaela Suditu, Luminia Rpeanu, Luminia Radu, Daniela Ionescu, Codrua
enea- Didactica Informaticii, Editura Karta-Graphic, 2011
16. Carmen Petre, Daniela Popa, Stefania Crciunnoiu, Camelia Iliescu- Metodica
Predrii Informaticii i Tehnologiei Informaiei, Editura Arves, 2002
150
Declaraie de autenticitate
151
152