+
Praktikum II

Praktikum II

Author: Dragan Milošević
Description:

Osnove rada u okruženju Visual Studio i programiranje u C#.

(more)
See More
Try a College Course Free

Sophia’s self-paced online courses are a great way to save time and money as you earn credits eligible for transfer to over 2,000 colleges and universities.*

Begin Free Trial
No credit card required

25 Sophia partners guarantee credit transfer.

221 Institutions have accepted or given pre-approval for credit transfer.

* The American Council on Education's College Credit Recommendation Service (ACE Credit®) has evaluated and recommended college credit for 20 of Sophia’s online courses. More than 2,000 colleges and universities consider ACE CREDIT recommendations in determining the applicability to their course and degree programs.

Tutorial

Uspostavljenje konekcije sa bazom podataka

U C# se mogu koristiti razne posotojeće kontrole za konekciju sa postojećom bazom podataka i manipulaciju tim podacima. Ove kontorle se mogu naći u “Toolbox” prozoru pod kategorijom “Data”.Ovde nećemo koristiti ove kontrole, jer želimo da pokažemo koja klasa je zadužena za koneklciju sa bazom podataka kao i da direktno koristimo SQL komande. Zarad što kvalitetnijeg i udobnijeg rada sa bazama podataka u C# trebalo bi savladati postojeće kontrole (ovde to nije cilj) pogotovo za rad sa MSSQL serverom baza podataka.

Da bi koristili podatke iz baze podataka najpre moramo napraviti konekciju sa bazom podataka. Za ovo nam je naravno potrebna baza podataka. Koristićemo postojeću Access bazu podataka "Filmovi". Ta baza je ustvari Access fajl. Da bi napravili konekciju sa bazom podataka koja je predstavljena tim fajlom potreban nam ne tzv. Connection String. Connection String predstavlja string pomoću koga C# klasa zadužena konekciju sa bazom podataka uspostavlja tu konekciju. Da ne bi pamtili napamet sam string, možemo ga “ukrasti” kada ga C# automatski kreira. To ćemo uraditi tako što prvo uključimo prozor “Data Sources” (trebalo bi da se nalazi uz prozor “Toolbox”). Ukoliko taj prozor nije pristuan možemo ga uključiti preko menija: View -> Other Windows -> Data Sources:

Kada kliknemo na „Data Sources“, dobijamo prozor sa linkom „Add New Data Source...“. Kada kliknemo na link dobijamo sledeći prozor i krećemo u proces povezivanja sa bazom podataka:

Ovde biramo Database pa Next. Sledeći prozor je:

Biramo Dataset. Naredni prozor je:

Naravno, pravimo novu konekciju i zato biramo New Connection.

Biramo Microsoft Access Database File. Sledeći prozor je:

Kliknemo na Browse... i pronađemo Access fajl koje predstavlja našu bazu. Ukoliko je baza na serveru na kome postoje nalozi korisnika onda je potrebno uneti User Name i Password. Ovde nema naloga pa pomenuta polja ostaju prazna. Da bi proverili da li konekcija može da se uspostavi kliknemo na dugme Test Connection. Ukoliko se pojavi prozor sa obaveštenjem o grešci onda je najverovatnije greška sa drajverima za konekciju, pa je potrebno pratiti uputstvo za njihovu instaliciju na zvaničnom sajtu Microsoft Office-a.

Zatvorimo prethodni prozor klikom na OK. I dobijamo prozor:

String izgleda slično sledećem:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Skola\Planovi\2015.2016\IV1_baze\SQL\priprema.accdb; Persist Security Info=False;

Ovaj string treba kopirati za kasniju upotrebu (možete da privremeno sačuvate u Notepad-u).

Kreiranje aplikacije za upravljanje podacima iz baze podataka

Kreiramo novu aplikaciju u C#. Radi lakšeg upravljanja aplikacijom dodajmo meni i jednu ListBox kontrolu u kojoj ćemo da prikazujemo podatke, slično slici dole:



Ovde je dat primer konekcije sa bazom podataka “Filmovi” koja je korištena ranije.

Potrebno je :

  1. Klikom na Konekcija potrebno je da aplikacija treba da se poveže sa bazom podataka
  2. Klikom na neku od tabela potrebno je prikazati određene (po želji ) podatke iz te tabele u ListBox kontroli.

Uspostavljanje konekcije

Dvostrukim klikom na Konekcija (meni gore) dobijamo editor koda. Da bi uspostavili konekciju sa bazom podataka koristićemo klasu OleDbConnection. Da bi koristili ovu klasu moramo uključiti odgovarajući namespace:

using System.Data.OleDb;

Zatim dodamo promenljivu klasi naše aplikacije:

OleDbConnection connection;

Zatim u generisanoj funkciji za događaj klika mišem na Konekcija:

private void konekcijaToolStripMenuItem_Click(object sender, EventArgs e)

        {

            connection = new OleDbConnection(); // objekat za konekciju

            connection.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Skola\Planovi\2015.2016\IV1_baze\SQL\priprema.accdb; Persist Security Info=False;";

            try

            {

                connection.Open(); // otvaranje konekcije

                MessageBox.Show("Uspesna konekcija!");

            }

            catch (Exception ex)

            {

                MessageBox.Show("Greska prilikom konekcije na bazu: " + ex);

            }

        }

Zadavanje SQL komande

Kada se uspostavi konekcija možemo koristiti SQL komande da bi manipulisali podacima iz baze podataka. Ovde ćemo demonstrirati rad sa SELECT komandom (mada postupak je isti i sa drugim komandama).

Da bi zadavali SQL komande koristićemo C# klasu koja je predviđena za ove poslove. Ta klasa je OleDbCommand.

Dvosturkim klikom na opciju menija Filmovi dobijamo generisanu funkciju u kojoj ćemo iskoristiti klasu:

private void filmoviToolStripMenuItem_Click(object sender, EventArgs e)

        {

            string komanda = "SELECT Naziv, Opis FROM Filmovi";

            OleDbCommand command = new OleDbCommand(komanda, connection);

            OleDbDataReader reader = command.ExecuteReader(); // klasa za citanja dobijenih podataka iz baze

            while (reader.Read()) // sve dok ima sta da se procita, tj. dok ima podataka, citaj jedan po jedan slog!

            {

                listBox1.Items.Add(reader.GetString(0) + " - " + reader.GetString(1));

            }

            reader.Close(); // na kraju je potrebno zatvortiti tok za citanje podataka

        }

Primetimo sledeće:

reader.GetString(0) označava čitanje dobijenih podatak u prvoj koloni (numerisanje kreće od nule) jednog sloga. Naša prva kolona je „Naziv“, a druga kolona je „Opis“ (tim redom su navedeni u SQL komandi). Tako da će u listBox kontroli imati onoliko redova koliko ima rezultata (slogova) iz baze podataka. U svakom redu će pisati naziv filma, a zatim crtica pa opis filma.


Igra "Gađanje kruga"

U ovom primeru potrebno je programirati stavke menija date u lekciji "Kreiranje menija" tako da se realizuje igra koja se sastoji od toga da se čekirani oblik (kvadrat ili krug) iscrtava na formi na svaku sekundu, a potrebno je da igrač klikom miša klikne unutar oblika kako bi dobio jedan poen. Ukoliko promaši unutrašnjost oblika igra se prekida. Brojač poena će biti dat u vidu Label kontrole na kojoj piše nula na samom početku igre. Igrač može sačuvati svoj skor (rezultat) klikom na opciju menija "Sacuvaj", a može početi i novu igru pri čemu pre početka može promeniti oblik koji se iscrtava čekiranjem odgovarajuće opcije menija "Nacrtaj". Iscratvanje oblika se vrši na slučajnoj poziciji na formi i slučajnih dimeznija koje ne prelaze zadati maksimum niti padaju ispod zadatog minimuma.

Za kvadrat maksimum i minimum se odnose na dužinu stranice, a za krug se odnose na poluprečnik.

Ovde će biti dato rešenje za krug, a za kvadrat se radi analogno.

Kreiraćemo klasu Krug sličnu klasi koja je napravljena u lekcija "Aplikacija Semafor".

 class Krug
    {
        private static int MIN = 5; // minimum 5 piksela
        private int r; // poluprecnik
        private int x, y; // koordinate centra
        private Graphics graphics; // objekat klase za crtanje
        private Random rand; // generator slucajnih brojeva
        private int max; // maksimum koji zadajemo kada kreiramo krug
        private Form form; // forma po kojoj se crta
        public Krug(Form form, int max)
        {
            this.form = form;
            this.graphics = form.CreateGraphics();
            this.rand = new Random();
            this.max = max;
        }
        public void noviKrug()
        {
            r = rand.Next(MIN, max);  // slucajni broj izmedju min i max
            x = rand.Next(r, form.ClientSize.Width - r);
            y = rand.Next(r, form.ClientSize.Height - r);
           // form.ClientSize je velicina forme za crtanje. Ovde zelimo da citav krug bude unutar forme, pa zato od velicine oduzimamo poluprecnik
       }
        public void crtaj()
        {
            // crta krug sive boje, na poziciji koju smo dobili u gornjoj metodi noviKrug()
            graphics.Clear(Color.Gray);
            graphics.FillEllipse(new SolidBrush(Color.Green), new Rectangle(x - r, y - r, 2*r, 2*r));
        }
        // Metod koji odredjuje da li je klik bio unutar kruga. Ako jeste daje vrednost 1, a suprotnom 0.
       public int kliknutoUnutar(MouseEventArgs e)
        {
            // e je objekat koji predstavlja klik misa. Tako su e.X i e.Y koordinate samog klika. Ovde proveravamo da li te koordinate upadaju u unutrasnjost kruga.
            if (e.X >= (x - r) && e.X <= (x + r) && e.Y >= (y - r) && e.Y <= (y + r))
            {
                return 1;
            }
            return 0;
        }
    }


Ovde ćemo dati uprošćenu proveru da li je klik unutar kruga. Ukoliko želite pravu proveru morate koristiti sledeću formulu za jednačinu kruga

Na gornjoj slici kruga vidimo da duž x ose klik miša mora biti veći ili jednak od x-r, a manji ili jednak x+r. Slično važi za y osu. Dakle po x osi uslov bi bio:

Sada, kada smo napisali klasu Krug preostaje da kreiramo jedan objekat ove klase kada se klikne na opciju menija "Nova igra", i aktivirati komponentu Timer. Komponentu Timer treba programirati da crta novi krug. Potrebno je programirati događaj MouseDown na formu da bi videli da li kliknuto unutar kruga. Ukoliko je krug promašen, onda se Timer zaustavlja, tj. prekida se igra, a ukoliko je pogođen dodaje se jedan poen.

Sama klasa forme mora imati objekat klase Krug kako bi ga koristili unutar forme:

    public partial class Form1 : Form
    {
        Krug krug;

Dvostruki klik na opciju menija "Nova igra" kako bi isprogramirali početak igre:

private void dodajToolStripMenuItem_Click(object sender, EventArgs e)
        {
            krug = new Krug(this, 70); // maksimum je 70 piksela                           timer1.Start();
            label1.Text = "0";
        }

Dvostruki klik na Timer kako bi programirali ovu komponentu da iscrtava nove krugove

private void timer1_Tick(object sender, EventArgs e)
        {
            krug.noviKrug();
            krug.crtaj();
        }


Progamiranje događaja MouseDown same forme kako proverili da li je klik mišem unutar kruga:

  private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (krug.kliknutoUnutar(e) == 1)
            {
                label1.Text = (Int32.Parse(label1.Text) + 1).ToString(); // +1 poen
            }
            else
            {
                timer1.Stop();  // prekida igru
            }
        }



Save dijalog

Prozori koji "iskoče" u toku rada jedne aplikacije i zahtevaju od korisnika da odgovori na pitanje sa "Yes" ili "No" ili da unese određene podatke se nazivaju dijalog prozori.

Prozor koji se pojavi kada odaberamo stavku menija "Save" da sačuvamo neki dokument se naziva Save Dialog prozor:

Ovaj prozor je sastavni deo Windows operativnog sistema i zato se skoro uvek pojavljuje isti prozor kada se odabere "Save" u različitim aplikacijama. 

C# nam omogućava da pokrenemo ovaj prozor kada želimo da naša aplikacija podrži čuvanje dokumanata (fajlova). Da bi smo ovo napravili potrebno je na formu dodati kontorlu koja se zove SaveFileDialog iz Toolbox prozora:

Ova kontorla nije vidljiva na formi, pa se nalazi u liniji ispod forme.

Ovde ćemo pomenuti sledeća najznačajnija podešavanja u okviru Properties prozora za ovu kontrolu:

Filter - ova opcija nam omogućava da podesimo koji formate (ekstenzije) treba da budu fajlove koji će se prikazivati unutar ovog Save Dialog prozora. Ako ovde otkucamo: Skor fajlovi|*.skr|Svi fajlovi*.*  onda će u prozoru Save Dialog u polju Save as type (u dnu prozora) biti dostupne dve opcije Skor fajlovi i Svi fajlovi. Ako se odabere Skor fajlovi onda će biti prikazani svi fajlovi unutar odabrano foldera koji imaju ekstenziju *.skr, a nazivu fajla koji je otukcan se prilikom klika na dugme Save automatksi dodaje ekstenzija skr. A ako se odabere Svi fajlovi onda će biti prikazani svih fajlovi, jer smo za eksteniziju postavili *.*. NAPOMENA: obratiti pažnju na format u kome se mora upisati vrednost za filter:

FilterIndex - je redni broj filtera koji će biti postavljen za osnovni. Na primer, ako ovde upišemo 2, onda će osnovni filter biti Svi fajlovi|*.* jer je taj filter drugi naveden u gornjim podešavanjima za filter.

InitialDirectory - predstavalja putanju do foldera čiji sadržaj želimo da prikažemo odmah nakon prikazivanja Save Dialog prozora. Obično se ovde upiše putanja do foldera koga predlažemo za čuvanje fajlove. Može biti bilo koji folder koji želimo, ali on mora postojati. NAPOMENA: biti obazriv sa ovom osbinom, jer ako prenesemo aplikaciju na drugi računar, moramo prethodno biti sigurni da folder posotji. Ovo se obično rešava programiranjem, tj. prilikom pokretanja aplikacije proveri se da li postoji folder, a ako ne postoji kreira se.

Kada korisnik naše aplikacije upiše ime fajla i klikne na dugme "Save" neće se ništa desiti, tj. fajl neće biti sačuvan. Čuvanje fajla moramo programirati. Save Dialog prozor koristi samo za prikupljanje informacije o nazivu fajla, ekstenziji i folderu u kome će biti sačuvan i ništa drugo.

Isprogramiraćemo stavku menija "Sacuvaj" iz donje lekcije o menijima tako da zaista sacuva neki podatak u fajl koji se navede. Neka taj podatak bude tekst koji piše u komonenti label1. Dvostruki klik mišem na "Sacuvaj" i dobijamo editor koda u kome pišemo:

private void sacuvajToolStripMenuItem_Click(object sender, EventArgs e)
        {
            saveFileDialog1.ShowDialog(); // pokrece SaveDialog prozor
            // ovde aplikacija pauzira dok se ne klikne na Save ili Cancel u tom prozoru
            if (saveFileDialog1.FileName.Length > 0) // proverava da li je ime fajla upisano
            {
                StreamWriter file = new StreamWriter(saveFileDialog1.FileName); // kreira fajl
                file.WriteLine(label1.Text); // upisuje u jednom redu fajla sadrzaj Label komponente
                file.Close(); // zatvara fajl
            }
        }

Da bi koristili klasu StreamWriter (koja kreira fajl i otvara ga za pisanje) potrebno je uključiti bibliotreku IO, tj. using System.IO;




Kreiranje menija

Ukoliko želimo da naša aplikacija ima dodatna podešavanja ili
napredne opcije onda će nam sasvim sigurno trebati meni da bi te opcije
pregledno organizovali.
Da bi kreirali meni za našu aplikaciju potrebno je pregleda alata (Toolbox) odabrati kontrolu (komponentu) MenuStrip:



Sama kontrola nije vidljiva na formi, pa je zato izlistana na liniji ispod forme. Ukoliko jednom kliknemo na kontolu dobićemo u zaglavlju forme bele pravougaonika u kojima možemo upisati tekst i time upisati stavke (opcije) našeg menija:

Možemo upisati stavke menija na gore opisani način tako da dobijemo sledeći izgled:

Primetimo da neke od stavki imaju tastaturnu prečicu, neke imaju sliku, a neke se mogu čekirati.

Ikonica stavke - predstavlja sliku pored stavke. Potrebno je jednom kliknuti na stavku, a zatim u Properties prozoru odabrati opciju Image i uraditi Import iz fajla koji smo prethodno pripremili.

Prečica za stavku - predstavlja kombinaciju tastatera kojom se direktno dolazi do stavke. Prečice se obično kreiraju kombinacijom nekih (ili svih) specijalnih tastera: CRTL, ALT, SHIFT uz dodatni taster koji može biti bilo koji na tastaturi. U primeru na gornjoj slici prečica je kombinacija tastera CRTL i S. Da bi ovo uradili potrebno u kliknuti jednom na željenu stavku menija i u prozoru Properties odabrati opciju ShorcutKeys:

Prečica uz kombinaciju ALT tastera - ova prečica se može jednostavno kreirat i za glavne opcija menija tako što se prilikom upisivanja naziva stavke ispred slova koje želimo da bude u kombinacije sa tasterom ALT dopiše simbol &. Na primer, ako napišemo &Igra onda će prečica za stavku menija igra biti ALT+I. NAPOMENA: simobl & neće biti vidljiv u meniju, a slovo I će biti podvučeno.



Aplikacija "Semafor"

Želimo da kada se klikne na dugme "Start" počne simulacija rada semafora.

Svetla ćemo predstaviti kao tri kruga, koja ćemo nacrtati na formi.

Na formu ćemo postaviti i tri Timer kontrole - po jedna za rad svakog svetla. Timer kontrole će meriti vreme za koje je jedno svetlo uključeno. Kada to vreme istekne onda se to svetlo gasi, a pali se sledeće svetlo i aktivira Timer za to svetlo. Kada želimo da svetlo bude isključeno crtaćemo krug sive boje, a kada želimo da bude uključeno crtaćemo krug odgovarajuće boja.

Za realizaciju ove aplikacije napravićemo klasu sa nazivom Svetlo. Ova klasa treba da crta krug sive boje kada je svetlo iskljuceno, a odovarajuće boje kada je ukljuceno.

Klasa treba da ima:

  • konstruktor kojem ćemo proslediti boja za svetlo koje želimo, dimenzije kruga i Graphics kontrolu koja pripada formi koju ćemo koristiti da bi nacrtali krugove na samoj formi.
  • metod pali - koji crta krug odgovarajuće boje. Pozivamo je kada želimo da uključimo svetlo.
  • metod gasi - koji crta krug sive boje. Pozivamo je kada želimo da isključimo svetlo.
class Svetlo

{
private Color boja;
private Rectangle dimenzije;
private Graphics grafika;


// Konstruktor
public Svetlo(Color boja, Rectangle dim, Graphics grafika)
{
this.boja = boja;
this.dimenzije = dim;
this.grafika = grafika;
this.ugasi(); // na pocetku ce sva svetla biti iskljucena!
}


// Crta sivi krug
public void ugasi()
{
grafika.DrawEllipse(new Pen(Color.Gray), dimenzije);
grafika.FillEllipse(new SolidBrush(Color.Gray), dimenzije);
}


// Crta krug odgovarajuce boje
public void upali()
{
grafika.DrawEllipse(new Pen(boja), dimenzije);
grafika.FillEllipse(new SolidBrush(boja), dimenzije);
}

}

Ovde smo koristili objekat grafika klase Graphics kojim crtamo krugove. Ovaj objekat je generisan iz početne forme.

Metod DrawEllipse crta elipsu (u ovo slučaju krug) po pomenutoj grafici.

Klasa Pen predstavlja boju i stil olovke pomoću koje crtamo elipsu - to je ustvari boja linije eliipse.

Metod FillEllipse ispunjava elipsu (u ovom slučaju kruga) određenom bojom.

Klasa SolidBrush predstavlja boju i stil bojenja - na ovaj način ćemo bojiti unutrašnjost (elipse) kruga.

Promenljiva dimenzije je ustvari zamišljeni pravougaonik unutar koga treba smestiti elipsu, pa na neki način predstavlja i njene dimenzije. Ako su širina i dužina pravougaonika jednake onda će to biti kvadrat, a onda će takav kvadrat (prvougaonik) biti dimenzija za krug.

Pravaougonik koristimo samo da bi odredili dimenzije elipse - sam provaougonik se neće iscratavati! Za definisanje pravaougaonika korisitmo koordinate gornjeg levog temena i širinu i dužinu u pikselima. Sam pravaougaonik prvo deklarišemo objektom klase Rectangle, a zatim taj objekat koristimo u metodama: DrawEllipse i FillEllipse (ovde je taj objekat dimenzija).


Programiranje dugmeta "Start"

Pre nego što započnemo programiranje samog dugmeta, deklarišimo promenljive koje su nam potrebne za ovu aplikaciju. To su:

  • Tri objekta klase Svetlo - svaki za po jedno svetlo
  • Instacu kalse Graphics - koja predstavlja površinu forme gde i želimo da crtamo.

Ova promenljive bi trebalo da budu unutar klase Form:

public partial class Form1 : Form
{
Graphics grafika;
Svetlo zeleno, zuto, crveno; ...

U konstruktoru same klase ćemo inicijalizovati ove promenljive:

public Form1()
{
InitializeComponent(); // automatski generisana linija koda.
// Linije koda koje smo dodali:
grafika = this.CreateGraphics();
zeleno = new Svetlo(Color.Green, new Rectangle(10, 10, 50, 50), grafika);
zuto = new Svetlo(Color.Yellow, new Rectangle(10, 70, 50, 50), grafika);
crveno = new Svetlo(Color.Red, new Rectangle(10, 130, 50, 50), grafika);
}

Rectangle(10, 10, 50, 50) je praovugaonik čiji gornje levo teme ima koordinate (10, 10) tj. udaljeno je od leve i gornje ivice forme za po 10 piksela. Dužina i širina tog pravougaonika je jednaka i iznosi 50 tj. reč je o kvadratu, jer želimo da nacrtamo krug.

Obratite pažnju na gornje levo teme preostala dva pravougaonika - ona moraju da budu na dovoljnoj udaljenost da se ne preklope sa prethodnim. Zato je njihova y koordianta za po 60 dalja od prethodnog pravougaonika, jer su im dimenzije 50 piskela, a ostavili smo da rastojanje između dva uzastopna bude po 10 piksela, zato je razmak ukupno 60 piksela,

Sada programski kod za dugme "Start" izlgeda ovako:

private void button1_Click(object sender, EventArgs e)
{
zeleno.upali(); //prvo ukljucujemo zeleno svetlo
timer1.Start();
}

Primetimo da smo odmah uključili i Timer1 - potrebno da odbroji koliko dugo će svetleti zeleno svetlo.


Programiranje kontrole Timer1

Kada Timer1 odbroji vreme, potrebno je iskljuciti ga, a zatim ukljuciti sledece svetlo i timer za to svetlo. Ove operacije je potrebno upisati kao programski kod vezan za Timer1:

private void timer1_Tick(object sender, EventArgs e)
{
zeleno.ugasi();
zuto.upali();
timer1.Stop();
timer2.Start();
}

Vama ostaje da isprogramirate događaje za preostala dva svetla na sličan način.

Programiranje komponenti

Postavimo formu novog projekta na sledeći način:

Neka je naziv polja za unos teksta (tzv. TextBox komponenti) sledeći: gornja neka je textBox1, a donja textBox2.

Programiraćemo dugme na kome stoji operator "+". Cilj je da kada se klikne na to dugme iskoči prozor na kome će pisati rezultat sabiranja dva broja koja su uneta u polja za unos teksta.

Da bi isprogramirali dugme za događaj "click", dovoljno je dvosturki klik na samo dugme nakon čega dobijamo sledeći prozor za editovanje koda:

Obratimo pažnju na naziv funkcije: button1_click. Ovo označava da će se funkcija izvršiti onog trenutka kada kliknemo da dugme koje se zove button1 (ovde je to dugme sa "+").

Potrebno je sada upisati komande koje treba da se obave da bi dobili prozor koji će prikazati rezultat sabiranja. Zato ćemo prvo uvesti promenljive koje će čuvati podatke koji su uneseni u polje za unos teksta. Kako očekujemo da budu uneseni celi brojevi, onda će te promneljive biti tipa int.

int broj1, broj2;

Sada je potrebno dodeliti im vrednost koja stoji u poljima za unos teksta:

broj1 = Int32.Parse(textBox1.Text);

broj2 = Int32.Parse(textBox2.Text);

Objašenjenje: Kako se u polja za unos teksta unosi bilo koji tekst onda će u njima svaki podatak biti tipa string. Zato je potrebno takav podatak prebaciti (parsovati) da bude broj. To radimo pomoću funkcije Parse, ali se ona nalazi u klasi Int32 koja predstavlaj klasu celih brojeve, pa je potrebno napisati Int32.Parse. U zagradi se novodi string koji želimo da parsujemo u ceo broj, a to je textBox1.Text, tj. ono što piše u polju za unos teksta koje se zove textBox1. Slično uradimo i za textBox2.

Sada je potrebno sabrati dva broja:

int rezultat = broj1 + broj2;

Na kraju prikazati razultat u novom prozoru:

MessageBox1.Show( rezultat.ToString() );

MessageBox je klasa koja predstavlja prozor koji iskoči u vidu poruke korisniku. Funkcija Show prikazuje taj prozor na ekranu, a poruka koju želimo da prikažemo u tom prozoru navodi se u zagradi kao string. Pošto poruka mora biti string, a mi imamo rezultat kao ceo broj, onda koristimo funkciju koja prebacuje broj u string - to je funkcija ToString(). Ovu funkciju poseduju skoro sve klase u C#.

Mogući problem: U ovoj aplikaciji se može desiti da umesto celih brojeva u polje za unos teksta budu uneti neki drugi podaci, na primer: realni brojevi ili neki tekst. U tom slučaju naš programski kod nece raditi, jer se takvi podaci ne mogu parsovati u ceo broj. Da bi zaštitili aplikaciju od prestanka rada, ceo prethodni kod stavićemo u takozvani try...catch blok.

Evo celog konačnog koda:

se izvršava ukoliko dođe do greške. Ukoliko ne dođe do greške catch blok se neće ni izvršiti. Zato smo unutar catch bloka pozvali prikaz prozora sa porukom o grešci.

Dodatak: MessageBox.Show možemo pozvati sa dva argumenta:

MessageBox.Show("Morate uneti cele brojeve.", "Greska");

Drugi argument će predstavljati natpis na prozoru koji iskoči.