Professional Documents
Culture Documents
Seminarski rad
Osnovni pojmovi vizuelnog programiranja u
programskom jeziku Visual C# 2008
Mentor : Student :
mr Zoran Veličković Nikola Lukić
br.indeksa R-48
1
Sadržaj :
1.Uvod………………………………………………………….1
1.1.Opsti uvod...........................................................................1
1.2.Opis teme rada....................................................................2
2.1. Vežba 1 : Osnove rada u konzoli…………………..…….3
2.1.1. Cilj vežbe........................................................................3
2.1.2 Zadatak vežbe..................................................................3
2.1.3 Realizacija vežbe.............................................................3
2.2.Vežba 2: Rad sa uslovnom petljom grananja....................5
2.2.1. Cilj vežbe........................................................................5
2.2.2 Zadatak vežbe..................................................................5
2.2.3 Realizacija vežbe.............................................................5
2.3.Vežba 3: Kreiranje padajućeg menija...............................8
2.3.1. Cilj vežbe........................................................................8
2.3.2. Zadatak vežbe.................................................................8
2.3.3. Realizacija vežbe............................................................8
2.4.Vežba 4 : Osnove rada sa klasama……….….….………10
2.4.1. Cilj vežbe.........................................................................10
2.4.2. Zadatak vežbe..................................................................10
2.4.3. Realizacija vežbe.............................................................10
2.5.Vežba 5: Rad sa tajmer (timer) kontrolom…..……….…12
2.5.1.. Cilj vežbe........................................................................12
2.5.2. Zadatak vežbe..................................................................12
2.5.3. Realizacija vežbe.............................................................12
2.6. Vežba 6 : Rad sa tekstualnim fajlovima ….………….….17
2.6.1. Cilj vežbe........................................................................17
2.6.2 Zadatak vežbe..................................................................17
2.6.3 Realizacija vežbe.............................................................17
2.7.Vežba 7 : Rad sa Grafičkim interfejsom ……….…….…20
2.7.1. Cilj vežbe.........................................................................20
2.7.2. Zadatak vežbe..................................................................20
2.7.3. Realizacija vežbe.............................................................20
2.8.Vežba 8 : Osnove internet programiranja…………......…24
2.8.1. Cilj vežbe.........................................................................24
2.8.2. Zadatak vežbe....................................................................24
2.8.3.1. Realizacija vežbe (Server deo) ......................................24
2.8.3.2..Realizacija vežbe (Klijent deo)……………..….………31
3. Zaključak……………..…..…………………………..….…….36
4. Dokumentacija .……………….………..………………….…….……37
2
1.Uvod
1.1.Opsti uvod
-Identifikovanja objekta
-Identifikovanja atributa objekata kao i njihovih vrednosti
-Identifikovanje funkcionalnosti objekta
-Klasifikacija objekata prema atributima i funkcionalnosti u kategorije ili klase .
-Rezultat klasifikacije je definicija klase
-Identifikovawe komunikacije između objekata
-private
-public
-protected
-protected internal
-internal
Ako niko spolja netreba da prisupi članu klase onda se on def. kao privatni. Da
treba biti dostupan svima onda je definisan kao javan. Zaštićeni član je dostupan samo
unutar svoje matične klase. Internal ili interni član je dostupan samo unutar tog
programa.[2]
3
1.2.Opis teme rada
Teme koje se provlače kroz ovoj rad biće usklađene sa početničkim znanjima
o vizuelnom programiranju. Od prve do osme vežbe obradićemo konzolne DOS
aplikacije, klase, uslovne petlje ili selekcije, grafičkog interfejsa, klijent server
aplikaciju. U polju realizacije vežbe ispod svakog zadatka postojaće izvorni kod po
principu primera. Npr. u zadatku piše da treba nacrtati kvadrat pomoću četiri linija
u polju za izvorni kod biće napisan kod kako nacrtati dve linije. U suštini najveći
deo biti detaljno obisan. Takođe u polju realizacije nalaziće se i slike formi kao
pomoć kako bi trebalo izvesti određeni zadatak. Izvorni kod sadrži komentare koji
direkno za svaku ključnu liniju koda opisuju istu. Pažnja je skrenuta i na sintaksu
jezika tako za razliku od Visual Basic-a programski jezik C# pravi razliku između
malih i velikih slova tako da mala nepažnja dovodi do greške. Vežbe su
raspoređene po principu od osnovnijeg ka složenijem primeru.
4
2.1. Vežba 1 : Osnove rada u konzoli
(Dos ili MsPrompt prozor)
2.1.1.Cilj vežbe :
2.1.2.Zadatak vežbe :
2.1.3.Realizacija vežbe :
Slika 1.1
5
Izvorni kod :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Vezba1
{
class Program
{
static void Main(string[] args)
{
string Student, brtel; // Def dve promenjive u jednoj liniji
Console.WriteLine("********************************");
Console.WriteLine("* Visoka tehnicka skola nis c# *");
Console.WriteLine("********************************");
// Pokupiti podatke , unos
Console.Write("Ime studenta : ");
Student = Console.ReadLine();
Console.Write("Broj telefona: ");
brtel = Console.ReadLine();
Console.WriteLine();
// Prikazati unete podatke
Console.WriteLine("====================================");
Console.WriteLine("-/- Podaci su uneti i prikazani -/-");
Console.WriteLine("====================================");
Console.Write("Student : ");
Console.WriteLine(Student );
Console.Write("Broj telefona : ");
Console.WriteLine(brtel );
Console.WriteLine("====================================\n");
Console.ReadLine();}}}
// Kraj izvornog koda Vezbe1
6
thread.Name = "Prosla je sekunda.....";
thread.Start();
}}
2.2.Vežba 2 : Rad sa uslovnom petljom (grananje ili selekcija)
2.2.1.Cilj vežbe :
2.2.2.Zadatak vežbe :
Napisati program koji zahteva unos imena i šifre (log in) da bi se prikazala
forma. Na novoj formi realizovati zahtev za unos dve šifre da bi se prikazala treća
forma. Ovaj zadatak realizovati pomoću tekst boksova i komandnih dugmeta.
2.2.3.Realizacija vežbe :
7
Slika1.1 . Slučaj da je sifra pogrešna (Forma1)
Izvorni kod :
private void proveri_Click(object sender, EventArgs e)
{
if (sifra.Text == "ovojesifra")
{ // uslov je ispunjen u tekst boks sifra uneto je "ovojesifra"
// i prikazace se forma Forma3
Forma2 frm2 = new Forma2();
frm2.Tag = this.Ime.Text;
frm2.Show();
this.Hide ();
}
else
{//slucaj da sifra nije uneta ispravna pojavljuje se poruka u msgboksu
MessageBox.Show("Uneta sifra je pogresna!!!");
}}
8
algoritam koji proverava tačnost unete vrednosti u teksboks Šifra1 sa vrednoću
ovoješifra1 i u tekstboks Šifra2 sa vrednoću ovoješifra2. Ako su obe vrednosti ispunile
tačnost prikazati formu Forma3 i sakriti formu Forma2.
Izvorni kod :
9
2.3.Vežba 3 : Kreiranje padajućeg menija
2.3.1.Cilj vežbe :
2.3.2.Zadatak vežbe :
Kreirati padajući meni na formi preko kojeg biramo koje će se nove forme
prikazati. Pokazati modalni i nemodalni prikaz formi. Koristiti skraćenice tastature.
Manuelno i automacki maksimizirati nove forme.
2.3.3.Realizacija vežbe :
10
Korak 2 : Kreirati za svaku stavku padajućeg menija istoimenu formu sem za Kraj
programa za koju treba napisati kod prekida aplikacije.
Izvorni kod :
private void forma1ToolStripMenuItem_Click(object sender, EventArgs e)
{
Forma1 frm1 = new Forma1();
frm1.ShowDialog();//modalni prikaz forme1
}
private void forma2ToolStripMenuItem_Click(object sender, EventArgs e)
{ // Modalni prikaz forme2 , metoda ShowDialog()
Forma2 frm2 = new Forma2();
frm2.ShowDialog();
}
private void forma3ToolStripMenuItem_Click(object sender, EventArgs e)
{ // Nemodalni prikaz nove forme pomoću metode Show
Forma3 frm3 = new Forma3();
frm3.Show();
}
private void forma4ToolStripMenuItem_Click(object sender, EventArgs e)
{ // Nemodalni prikaz nove forme
Forma4 frm4 = new Forma4();
frm4.Show();
}
Izvorni kod :
private void Forma3_Load(object sender, EventArgs e)
{//postavljamo vrednost za maksimiziranje forme i to u dogadjaju
//form_load
this.WindowState = FormWindowState.Maximized;
}
11
2.4.Vežba 4 : Osnove rada sa klasama
2.4.1.Cilj vežbe :
2.4.2.Zadatak vežbe :
2.4.3.Realizacija vežbe :
Korak 1 : Otvoriti novi projekat tipa Class i generisati javnu klasu Produkt i u
njoj sledeće promenjive :
12
{
return GodinaPro ; //dobiti podatak o god proizvodnji
} //Funkcija mora imati makar jednu povratnu vrednost
Napisati podrutinu public void Start() , koji štampa “ Motor uključen , pritisni
enter za kraj”
Korak 2 : Generisati klasu class MainClass i u njoj napisati glavnu funkciju
public static void Main(). U glavnoj funkciji postaviti sledeće vrednosti i napisati kod
za prikaz dodeljenih vrednosti:
Slika 1.1.
Napomena :
13
Da smo našu klasu nazvali Produkt1 onda bi linija koda
Produkt produktAUTO = new Produkt(); izgledala kao :
Produkt1 produktAUTO = new Produkt1();
2.5.1.Cilj vežbe :
2.5.2.Zadatak vežbe :
2.5.3.Realizacija vežbe :
14
Slika1.1.Prikaz vremena
Izvorni kod :
15
Slika 1.3 Zadato vreme je isteklo pojavljuje se poruka
Izvorni kod :
private int sekunde;//neophodno je definisati promenjive tipa integer
private int minuti; // radi korišćenja ugrađene klase datetime
private int sati;
private void timer1_Tick(object sender, EventArgs e)
{
if (sekunde == 0 & minuti == 0 & sati == 0)
{
timer1.Enabled = false; // kad se ispuni uslov tajmer prestaje sa
MessageBox.Show("Vreme je isteklo");//radom I pojavljuje se poruka
}
if (sekunde == 0 & minuti == 0 & sati != 0)
{ // relacioni operator != znači nejednak
sati--;//Dekrement sati jer su sekunde I minuti istekli
// a sati ima još
textBox3.Text = sati.ToString();
minuti = 59; //rasitnili smo jedan sat
sekunde = 59;
textBox2.Text = minuti.ToString();//dodeljivanje vrednosti radi
//prikaza vrednosti promenjivih tipa string
textBox1.Text = sekunde.ToString();
}
if (sekunde == 0 & minuti != 0)
{
minuti--; //sati su istekli ,sekunde su istekle
//ali minuta ima jos
textBox2.Text = minuti.ToString ();
sekunde = 59;
textBox1.Text = sekunde.ToString ();
}
sekunde--;//ostale su još sekunde za odbrojavanje
textBox1.Text = sekunde.ToString();
}
private void button1_Click(object sender, EventArgs e)
16
{
timer1.Enabled = true;
sekunde = System.Int32.Parse(this.textBox1.Text);
//dodeljivanje vrednosti promenjivim kreće odbrojavanje Metoda
parse //omogućuje da se vrednosti tekst boksova orijentišu na tip
integer
minuti = System.Int32.Parse(this.textBox2.Text);
sati = System.Int32.Parse(this.textBox3.Text);
}
private void button2_Click(object sender, EventArgs e)
{ sekunde = 0 ;
minuti = 0 ;
sati = 0;
//Isključuje se tajmer , vrednosti se vraćaju na nulu
textBox1.Text = sekunde.ToString();
textBox2.Text = minuti.ToString();
textBox3.Text = sati.ToString();
timer1.Enabled = false;
}
17
Izvorni kod :
18
2.6. Ve`ba 6 : Rad sa tekstualnim
fajlovima
2.6.1.Cilj vežbe :
2.6.2.Zadatak vežbe :
Napraviti aplikaciju koja vrši unos po principu linija po linija u tekstualni fajl i
po istom principu vrši čitanje iz fajla.
2.6.3.Realizacija vežbe :
19
Kreirati dodatne forme Unos, Citanje i prikazati ih modalno preko stavki
padajućeg menija .
20
streamWriter1.WriteLine("uneta je druga linija .");
streamWriter1.WriteLine(textBox1.Text);
streamWriter1.WriteLine(textBox2.Text);
if (streamWriter1 != null)
streamWriter1.Close();// zatvaranje klase i fajla
textBox1.Text = "";// brisanje sadrzaja
textBox2.Text = "";}
21
Slika 1.2. Prikaz sadržaja tekstualnog fajla
2.7.1.Cilj vežba :
2.7.2.Zadatak vežbe :
2.7.3.Realizacija vežbe :
22
Korak 2: Izcrtati sa 4 linije kvadrat koristeći za koordinate svih tačaka samo
sledeće vrednosti 50 ,200 . Kao na slici 1.1.
}
private void Grafika_Paint(object sender,
System.Windows.Forms.PaintEventArgs e)
{
switch (biraj)
{
case 1:
Graphics linija = e.Graphics;
23
Slika 1.2. Pravougaonik crvene boje
24
Korak 5: Izcrtati poligon , proizvoqnog izgleda ali da bude vidljiv i bez
presecanja kao na slici 1.4.. Oblik zavisi od izbora tačaka koje uzimamo .
Slika 1.4.Poligon
25
2.8. Vežba 8 : Osnove internet programiranja
2.8.1.Cilj vežbe :
2.8.2.Zadatak vežbe :
U okviru ove vežbe napisati dve odvojene windows aplikacije i to pod nazivom
projekata Klijent deo i Server deo. Server treba da obezbedi prihvatanje više klijenata i
string podataka koji oni šalju. Poruka jednog od klijenata treba proslediti svim ostalim
konektovanim klijentima. Isto tako treba obavestiti sve korisnike o napuštanju jednog
od klijenta ili o konekciji novog klijenta. Otvaranje porta za čekanje nove konekcije
preko dugmeta i događaja klik. Na strani klijenta preko jednog komandnog dugmeta
obezbediti konekciju i diskonekciju. Kad smo na fokusu teksboksa koji služi za unos
podataka koje želimo da šaljemo na pritisak ENTER obezbediti slanje podataka preko
servera svim ostalim klijentima .
26
2.8.3.1.Realizacija vežbe (Server deo)
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
using System.Collections;
namespace ChatServer
{
public class StatusChangedEventArgs : EventArgs
{
private string EventMsg;
27
Slika1.1.Na slici je forma na kojoj je pritisnuto dugme za odvaranje porta
class ChatServer
{
// Odredji je limit broja korisnika
public static Hashtable htUsers = new Hashtable(30);
// 30 korisnika od jednom
public static Hashtable htConnections = new Hashtable(30);
private IPAddress ipAddress;
private TcpClient tcpClient;
// Dogadjaj koji obavestava formu o konekciji ,diskonekciji i
slanju // poruka
public static event StatusChangedEventHandler StatusChanged;
private static StatusChangedEventArgs e;
// Konstruktor klase Chatserver
public ChatServer(IPAddress address)
{
ipAddress = address;
}
// Nit koja drzi port otvorenim
private Thread thrListener;
// TCP objekt
private TcpListener tlsClient;
// Reci cemo while petnji da ceka na konekciju
bool ServRunning = false;
// Unesi korisnika
public static void AddUser(TcpClient tcpUser, string strUsername)
{
// Unesi korisnika
ChatServer.htUsers.Add(strUsername, tcpUser);
ChatServer.htConnections.Add(tcpUser, strUsername);
// Reci svima ostalima da je novi korisnik tu
SendAdminMessage(htConnections[tcpUser] + " nam se pridružijo !");
}
// Ukloni korisnika
28
public static void RemoveUser(TcpClient tcpUser)
{
if (htConnections[tcpUser] != null)
{
// Korisnik nas je napustio
SendAdminMessage(htConnections[tcpUser] + " nas je napustio !");
//Ukloni podatke o njemu
ChatServer.htUsers.Remove(ChatServer.htConnections[tcpUser]);
ChatServer.htConnections.Remove(tcpUser); }}
//Ova rutina se poyiva kada zelimo probuditi StatusChanged dogadjaj
public static void OnStatusChanged(StatusChangedEventArgs e)
{
StatusChangedEventHandler statusHandler = StatusChanged;
if (statusHandler != null)
{// Pozivati delegata
statusHandler(null, e); }}
// Posalji administrativnu poruku
public static void SendAdminMessage(string Message)
{
StreamWriter swSenderSender;
29
TcpClient[] tcpClients = new TcpClient[ChatServer.htUsers.Count];
// izkopiraj klijentu
ChatServer.htUsers.Values.CopyTo(tcpClients, 0);
for (int i = 0; i < tcpClients.Length; i++)
{
// Pokusaj posalji svima poruku
try
{
// Ako je poruka prazna ili nema korisnika prekidaj
if (Message.Trim() == "" || tcpClients[i] == null)
{
continue;
}
// Posalji onima koji su tu
swSenderSender = new StreamWriter(tcpClients[i].GetStream());
swSenderSender.WriteLine(From + " kaze : " + Message);
swSenderSender.Flush();
swSenderSender = null;
}
catch //Ako ima problem sa korisnikom uzbaciti ga
{
RemoveUser(tcpClients[i]);
}}}
public void StartListening()
{ //Postaviti IP
IPAddress ipaLocal = ipAddress;
// Postaviti port
tlsClient = new TcpListener(1106);
// Otvoriti port osluskivanje
tlsClient.Start();
// while strukturom proveravacemo stanje
ServRunning = true;
thrListener = new Thread(KeepListening);
thrListener.Start();
}
private void KeepListening()
{ // Dok je server pokrenut prihvata dolazece zahteve
while (ServRunning == true)
{// Prihvati dolazece zahteve
tcpClient = tlsClient.AcceptTcpClient();
// Kreiraj novu instancu
Connection newConnection = new Connection(tcpClient);
}}}
class Connection
{
TcpClient tcpClient;
// Potrebne klase i promenjive radi slanja poruke
private Thread thrSender;
private StreamReader srReceiver;
private StreamWriter swSender;
private string currUser;
private string strResponse;
// Konstruktor
public Connection(TcpClient tcpCon)
{
tcpClient = tcpCon;
30
// Prihvata klijente i ceka nove
thrSender = new Thread(AcceptClient);
thrSender.Start();
}
private void CloseConnection()
{
// Zatvori objekte
tcpClient.Close();
srReceiver.Close();
swSender.Close();
}
// Prihvatanje klijenta ili korisnika
private void AcceptClient()
{
srReceiver = new
System.IO.StreamReader(tcpClient.GetStream());
swSender = new
System.IO.StreamWriter(tcpClient.GetStream());
31
// I dalje cekaj za poruku
while ((strResponse = srReceiver.ReadLine()) != "")
{
// Ako je nepravilna izbaci ga
if (strResponse == null)
{
ChatServer.RemoveUser(tcpClient);
}
else
{
// Posalji svim korisnicima poruku
ChatServer.SendMessage(currUser, strResponse);
}}}
catch
{
// Ako bilo sta nevalja sa ovim korisnikom diskonektuj ga
ChatServer.RemoveUser(tcpClient);
}}}}
Izvorni kod ( kompletan sadržaj koda forme form1.cs):
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace ChatServer
{
public partial class Form1 : Form
{
private delegate void UpdateStatusCallback(string strMessage);
public Form1()
{
InitializeComponent();
}
32
public void GlavniServer_StatusChanged(object sender,
StatusChangedEventArgs e)
{
//Prihvatanje primljenih podataka podataka
this.Invoke(new UpdateStatusCallback(this.UpdateStatus), new object[]
{ e.EventMessage });
}
private void UpdateStatus(string strMessage)
{
// Unesi poruku u tekstualni boks
txtLog.AppendText(strMessage + "\r\n");
}
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}}}
33
Slika1.2. Izgled forme Form1
34
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;
namespace ChatClient
{
public partial class Form1 : Form
{
// definisanje korisničkog imena tipa string
private string UserName = "Nepoznat";
private StreamWriter swSender;
private StreamReader srReceiver;
private TcpClient tcpServer;
// Potrebno radi obavestenja forme da je poruka stigla
private delegate void UpdateLogCallback(string strMessage);
// Potrebno da se obavesti forma da je diskonekcija izazvana
// od druge strane (servera)
private delegate void CloseConnectionCallback(string strReason);
private Thread thrMessaging;
private IPAddress ipAddr;
private bool Connected;
public Form1()
{
// Pre izlaska iz aplikacije da se izvrši diskonekcija
Application.ApplicationExit += new EventHandler(OnApplicationExit);
InitializeComponent();
}
// Po izlasku iz aplikacije obezbeđuje diskonekciju
public void OnApplicationExit(object sender, EventArgs e)
{
if (Connected == true)
{
// Ukoliko je status konektovan onda ga diskonektuj
Connected = false;
swSender.Close();
srReceiver.Close();
tcpServer.Close();
}
}
private void btnConnect_Click(object sender, EventArgs e)
{ // preimenijte ime dugmeta za konekciju ! ! !
if (Connected == false)
{ // Ako nismo konektovani pokušaće da se konektuje
// Inicijalizacija konekcije
InitializeConnection();
}
else // Već smo konektovani izvrši diskonekciju
{ Connected = false ;
Connected = false;
swSender.Close();
srReceiver.Close();
tcpServer.Close();
CloseConnection("Kraj konekcije po korisnickom zahtevu.");
}
35
}
private void InitializeConnection()
{
//Dodeliti promenjivoj sadržaj tekstualnog boksa
ipAddr = IPAddress.Parse(txtIp.Text);
// Startovati novi TCP objekat sa serverom
tcpServer = new TcpClient();
tcpServer.Connect(ipAddr, 1106);// IP adresa i Port udaljenog servera
Connected = true;
// Pripremiti formu
UserName = txtUser.Text;
//Podesiti opcije Disable i enable za režim koada smo konektovani
txtIp.Enabled = false;
txtUser.Enabled = false;
Poruka.Enabled = true;
Salji.Enabled = true;
btnConnect.Text = "Disconnect";
// Poslati Korisničko ime serveru
swSender = new StreamWriter(tcpServer.GetStream());
swSender.WriteLine(txtUser.Text);
swSender.Flush();
// Pokrenuti nit za primanje poruka i dolju komunikaciju
thrMessaging = new Thread(new ThreadStart(ReceiveMessages));
thrMessaging.Start();
}
private void ReceiveMessages()
{ // Prihvatiti poruku sa servera
srReceiver = new StreamReader(tcpServer.GetStream());
// Ako je prvi karakter koji je primljen 1 , onda smo uspesno
// konektovani
string ConResponse = srReceiver.ReadLine();
// Ako je prvi poslati karakter 1 to je znak da je konekcija uspešna
if (ConResponse[0] == '1')
{
// Obavestiti formu da smo uspesno konektovani
this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[]
{ "Uspesna konekcija!" });
}
else // Ako prvi karakter nije l već obično 0 onda
nismo // propisno konektovani
{
string Reason = "Nema konekcije! ";
// Ima 3 pokusaja
Reason += ConResponse.Substring(2, ConResponse.Length - 2);
// Obavesti formu za razlog
this.Invoke(new CloseConnectionCallback(this.CloseConnection), new
object[] { Reason });
// Izađi iz ove metode
return;
}
// Uspesno smo konektovani i prihvatamo podatke sa servera
while (Connected == true)
{
try
{
this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[]
{ srReceiver.ReadLine() });
36
}
catch
{
Connected = false;
// swSender.Close();
// srReceiver.Close();
tcpServer.Close();
}
finally
{
}
}}
// prikaz pristiglih I poslatih podataka u tekst boks
private void UpdateLog(string strMessage)
{
// Pokazati najnoviji tekst na dnu
txtLog.AppendText(strMessage + "\r\n");
}
// Zatvori postojeću konekciju
private void CloseConnection(string Reason)
{// Pokaži razlog zasto se vrši diskonekcija
txtLog.AppendText(Reason + "\r\n");
// Podesi opcije Enable i disable za određene kontrole za režim
// diskonekcije
txtIp.Enabled = true;
txtUser.Enabled = true;
Poruka.Enabled = false;
Salji.Enabled = false;
btnConnect.Text = "Connect";
// Zatvori objekte
Connected = false;
// swSender.Close();
// srReceiver.Close();
tcpServer.Close();
}
37
SendMessage();
}
}
private void button1_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void Poruka_TextChanged(object sender, EventArgs e)
{
} // I ako je ova rutina prazna neophodna je
}}
Korak 3 : Pokrenuti oba dela projekta i probati konekciju kao na slici 1.3.
Slika1.3.Prikaz konekcije
3. Zaključak
38
novije verzije programskih jezika ali ipak postoji u dovoljnoj meri. Preporučujem web
adrese navede u dokumentaciji. Većina koda je dato u formi klase ili je napisan za
konzolnu aplikaciju ali i takav kod uz manje prepravke možete napisati windows
aplikaciju. U vizuelnoj sredini komandu Console.WriteLine zamenili bi
MessageBox.Show komandom. Tako svaku konzola aplikaciju možemo prevesti u
windows aplikaciju uz male prepravke .
Dokumentacija
39
[1] Microsoft Corporation, C# version 2.0 Specification, MAY 2004
[3] http://www.fincher.org/tips/Languages/csharp.shtml
zadnji pristup : 21.06.2009.
[4] http://www.java2s.com/Tutorial/CSharp/CatalogCSharp.htm
zadnji pristup : 22.06.2009.
[5] http://www.codeproject.com
zadnji pristup : 22.06.2009.
[6] http://www.geekpedia.com/tutorial239_Csharp-Chat-Part-1---Building-the-Chat-
Client.html
zadnji pristup : 22.06.2009.
40