Kirish Roʻyxatdan oʻtish

Docx

  • Referatlar
  • Diplom ishlar
  • Boshqa
    • Slaydlar
    • Referatlar
    • Kurs ishlari
    • Diplom ishlar
    • Dissertatsiyalar
    • Dars ishlanmalar
    • Infografika
    • Kitoblar
    • Testlar

Dokument ma'lumotlari

Narxi 100000UZS
Hajmi 1.1MB
Xaridlar 0
Yuklab olingan sana 24 May 2024
Kengaytma docx
Bo'lim Kurs ishlari
Fan Informatika va AT

Sotuvchi

Zafar Nurullayev

Ro'yxatga olish sanasi 22 May 2023

66 Sotish

Onlayn chat qilish tizimi

Sotib olish
Mundarija
Kirish ........................................................................................................................ 1
1. Nazariy qism ........................................................................................................ 4
1.1. Axborot tizimlari .............................................................................................................................. 4
1.2. Onlayn chat daturi va uning imkoniyatlari ........................................................................................ 7
1.3. Axborot tizimlarini ishlab chiqishda foydalanilgan dasturlash tillari ................................................ 9
2. Amaliy qism ....................................................................................................... 23
2.1. Axborot tizimini loyihalashtirirsh ................................................................................................... 23
2.2. Onlayn chat tizimi interfeysi ........................................................................................................... 27
Xulosa ..................................................................................................................... 30
Foydalanilgan adabiyotlar .................................................................................... 32
Ilovalar .................................................................................................................... 33
Kirish
Bugungi   kunda   C#   dasturlash   tili   axborot   texnologiyalari   sohasidagi   eng
kuchli,   tez   rivojlanayotgan   va   talablarga   javob   beradigan   tillardan   biri   sifatida tanilgan.   Hozirda   u   har   qanday   dasturlarni   yozadi.   Bular   oddiy   ish   stoli
dasturlaridan   tortib,   har   kuni   millionlab   foydalanuvchilarga   xizmat   ko'rsatuvchi
katta veb-portallar va veb-xizmatlar.
C#  juda yangi   dasturlash  tili  emas,  lekin u  butun  .NET platformasida  uzoq
yo'lni bosib o'tdi. Tilning birinchi versiyasi 2002 yil fevral oyida Microsoft Visual
Studio   .NET   platformasining   chiqarilishi   bilan   birga   paydo   bo'ldi.   Tilning   eng
so'nggi versiyasi Ц# 9.0 bo'lib, u 2020 yil 10 noyabrda .NET 5 versiyasi bilan birga
chiqarilgan. C# - bu dasturlash tiliga o'xshash sintaksisga ega bo'lgan va shu bilan
birga C++ va Java-ga yaqin bo'lgan til. Shu sababli,  ushbu tillardan birini  yaxshi
biladi,   C#   ni   o'rganishni   o'rganadi.   C#   ob'ektga   yo'naltirilgan   dasturlash   tili   bilan
bog'liq bo'lganda, C++ ning ko'pgina xususiyatlarini o'z ichiga oladi. Misol uchun,
C# ning polimorfizmi, miyning yuklanish muammosi, operatorning ma'lum birligi,
ma'lum bir vaqtdagi ma'lum birligi, yangi statik ma'lumotlarni o'z ichiga oladi, C#-
ning bir xilligini ta'minlaydi.
C#   dasturiy   tilining   tarixi   haqida   gapiradigan   bo'lsak,   Microsoft   dasturiy
ta'minotining   dasturiy   ta'minot   loyihasi   Java   uchun   C++   nomli   raqib   bo'lgan,
ammo   "Seol"   kodli   C#   dasturiy   ta'minotini   qoldirgan.   Microsoft   C#ni   2000   yil
o'rtalarida   ECMA   standartlari   guruhiga   taqdim   etdi.   C#   2.0   versiyasi   2005   yil
oxirida Microsoftning Visual Studio 2005 dasturiy ta'minotining bir qismi sifatida
chiqarildi.   C#   ning   2.0   versiyasi   meros   bo'lib,   alohida   sinflar   va   iteratorlar
o'zlarining   yangi   xususiyatlarini   yaratishga   qodir   bo'ladilar.[14-16]   Ushbu   kursda
C#   dasturiy   ta'minot   tili   yordamida,   Internet   orqali   matn   xabarlarini   almashish
orqali chat dasturiy ta'minotini yaratilgan.
Ishning   birinchi   xatboshida   C#   tilining   paydo   bo'lishi   va   rivojlanish   tarixi,
uning .Net Framework bilan aloqasi haqida gap boradi. Ikkinchi xatboshida Visual
C# boshqaruv elementlari, ularning bajarilishi  va xususiyatlari haqida gap boradi.
Uchinchi   xatboshida   chat   dasturini   yaratishda   ishlatiladigan   prinsiplar,   uning
tuzilishi   haqida   gap   boradi.   To'rtinchi   xatboshida   dasturiy   ta'minotning
ishlatiladigan   algoritmlari   haqida   gap   boradi.   Beshinchi   xatboshida   dasturiy
ta'minotda   foydali   bo'lgan  funktsiyalar,   ularning  bajarilishini   o'rgatish   haqida   gap
2 boradi.   Oxirgi   oltinchi   xatboshida   dasturiy   ta'minotdan   qanday   foydalanish
kerakligi haqida gap boradi.
3 1. Nazariy qism
1.1. Axborot tizimlari
Tizim  – dеganda, yagona maqsad yo lida bir vaqtning o zida ham yaxlit, hamʻ ʻ
o zaro   bog langan   tarzda   faoliyat   ko rsatuvchi   elеmеntlar,   obyеktlar   majmuasi	
ʻ ʻ ʻ
tushuniladi. Dеmak, xar qanday tizim biror-bir aniq maqsad yo lida xizmat qiladi.	
ʻ
Masalan,   sizga   ma lum   bo lgan   shaxar   tеlеfon  tarmoqlari   tizimi,  insondagi   yurak	
ʻ ʻ
qon-tomir   tizimi,   asab   tizimi   va   boshqalar   sun iy   yaratilgan   va   tabiiy   tizimlarga	
ʻ
misol   bo la   oladi.   Ularning   har   biri   tizimga   qo yiladigan   barcha   shartlarga   javob	
ʻ ʻ
bеradi,   ya ni,   har   biri   o ziga   xos   yagona   maqsad   yo lida   faoliyat   ko rsatadi   va
ʻ ʻ ʻ ʻ
tizimni tashkil etuvchi elеmеntlardan iborat.
Ma lumki, bugungi kunda ko plab turli xil tizimlar yaratilgan bo lib, ular o z
ʻ ʻ ʻ ʻ
tarkibi   va   bosh   maqsadlari   bo yicha   bir-biridan   farqlanadi.   Masalan,   quyidagi	
ʻ
jadvalda bir necha tizimlarga namunalar keltirilgan:
“Tizim” tushunchasi keng tarqalgan va juda ko plab ma nolarda qo llaniladi.	
ʻ ʻ ʻ
Axborot  tizimlariga   nisbatan   qo llanilganda   aksariyat hollarda texnik   vositalar	
ʻ
va dasturlar to plami nazarda tutiladi. Kompyuterning faqat apparat qismini tizim	
ʻ
deb   atash     mumkin.     Muayyan     amaliy     vazifalarni     bajarish   uchun   hujjatlarni
yuritish     va   hisob-kitoblarni     boshqarish   jarayonlari     bilan   to ldirilgan     ko plab	
ʻ ʻ
dasturlarni ham tizim deb hisoblash mumkin.
Har bir tizim to rt asosiy qismdan iborat:	
ʻ
 kiritish;
 ishlov berish;
4  chiqarish;
 teskari aloqa.
Axborot tizimi
Axborot   tizimi   –   bеlgilangan   maqsadga   erishish   yo lida   axborotni   yig ish,ʻ ʻ
saqlash,   qayta   ishlash   va   uzatish   uchun   qo llaniladigan   usullar,   vositalar   va	
ʻ
shaxslarning o zaro bog langan majmuasidir.	
ʻ ʻ
Axborot  tizimlari   nafaqat   axborotni  qayta   ishlash   va  saqlash,  yozuv-chizuv
ishlarini   avtomatlashtirish,   balki   qarorlarni   qabul   qilish   (sun iy   intеllеkt   usullari,	
ʻ
ekspеrt tizimlari va hokazolar), zamonaviy tеlеkommunikatsiya vositalari (elеktron
pochta, tеlеkonfеrеnsiyalar), yalpi va lokal hisoblash tarmoqlari va boshqaruvning
yangi   uslublaridan   foydalanish   hisobiga   boshqaruv   obyеkti   faoliyati
samaradorligini oshiradi va shu maqsadda kеng qo llaniladi.	
ʻ
Ma lumki,   hozirgi   davrda   O zbekiston   Respublikasining   barcha   sohalarida	
ʻ ʻ
ko plab   axborot-kommunikatsiya   texnologiyalari   qo llanilmoqda.   Ularni   yaratish,	
ʻ ʻ
faoliyat   olib   borish   va   keng   tarqalishidan   asosiy   maqsad   jamiyatning
axborotlashtirish muammolarining  е chimi hisoblanadi. 
Axborot – kommunikatsiya texnologiyalarining rivojlanishi turli tashkilot va
korxonalarda axborot tizimlaridan foydalanish bilan uzviy bog liq. Shunday qilib,	
ʻ
yangi   axborot   texnologiyalarini   boshqaruvchilar,   mutaxassislar,   texnik   xodimlar
uchun   axborotni   qayta   ishlash,   qarorlar   qabul   qilish   hamda   axborotlarni   to liq   va	
ʻ
aniq   ma lumotlar   bilan   ta minlashga   yordam   beruvchi   zamonaviy   axborot	
ʻ ʻ
tizimlarini yaratish imkonini beradi. 
Inson,   jamoa   va   tashkilotning   samarali   faoliyati   ko p   jihatdan   axborotga	
ʻ
egalik   darajasi   va   undan   samarali   foydalanish   imkoniyatiga   bog liq.   Boshqacha	
ʻ
aytganda,   biror   to g ri   qarorni   qabul   qilishdan   avval   axborotlarni   to plash,   qayta	
ʻ ʻ ʻ
5 ishlash,   tahlil   qilish   kerak.   Istalgan   sohada   to g ri   qaror   qabul   qilishda   kattaʻ ʻ
hajmdagi axborotlarni qayta ishlash zarurati mavjud, buni osonlashtirish uchun esa
maxsus   texnik   va   dasturiy   vositalarni   jalb   etish   mumkin.   Buning   natijasida
zamonaviy   axborot-kommunikatsiya   texnologiyalariga   tayangan   yangi   axborot
tizimlarini   yaratishga   talab   ortib   bormoqda.   Tashkilot,   korxona   yoki
muassasalarning   tashkiliy-huquqiy   bazasidan   qat iy   nazar   aynan   dolzarb   va   aniq
ʻ
axborotga   egalik   bilan   bir   qatorda,   ularga   mos   ravishda   ushbu   axborotlarni
to plash,   qayta   ishlash   va   uzatishning   samarali   usul   va   uslublaridan   foydalanish	
ʻ
muvafaqqiyatning asosiy garovi hisoblanadi.
Axborot tizimlarining turlari
Axborot   tizimlarining   avtomatlashtirilgan   va   avtomatik   turlari   ma lum.	
ʻ
Avtomatlashtirilgan axborotlar tizimida boshqarish yoki ma lumotlari qayta ishlash	
ʻ
funksiyalarining   bir   qismi   avtomatik   ravishda,   qolgani   esa   inson   tomonidan
bajariladi.   Avtomatik   axborotlar   tizimida   boshqarish   va   ma lumotlarni   qayta	
ʻ
ishlashning   barcha   funksiyalari   texnik   vositalarda,   inson   ishtirokisiz   amalga
oshiriladi (masalan, texnologik jarayonlari avtomatik boshqarish).
Qo llanish   sohasiga   qarab,   axborot   tizimlarini   quyidagi   sinflarga   ajratish	
ʻ
mumkin:
 ilmiy tadqiqotlarni avtomatlashtirish va boshqarish;
 loyihalashtirishni avtomatlashtirish;
 tashkiliy jarayonlarni boshqarish;
 texnologik jarayonlarni boshqarish.
Iimiy   axborot   tizimlari   –   ilmiy   xodimlar   faoliyatini   avtomatlashtirish,
trategic axborotni tahlil etish, tajribalarni boshqarish uchun mo ljallangan.	
ʻ
Loyihalashtirishni   avtomatlashtirishning   axborot   tizimlari   –   yangi   texnika
(texnologiya)   ishlab   chiqaruvchilar   va   muhandis   loyihachilar   mehnatini
avtomatlashtirish uchun mo ljallangan.	
ʻ
Tashkiliy   boshqaruvning   axborot   tizmilari   –   shaxslar   funksiyalarini
avtomatlashtirish   uchun   mo ljallangan.   Bu   sinfga   ham   sanoat   (korxonalar),   ham
ʻ
nosanoat   obyektlari   (bank,   birja,   sug urta   kompaniyalari,   mexmonxonalar   va	
ʻ
6 hokazolar)   va   ayrim   ofislar   (ofis   tizimlari)ni   boshqarishning   axborot   tizimlari
kiradi.
Texnologik   jarayonni   boshqarishning   axborot   tizimlari   –   turli   texnologik
jarayonlarni   avtomatlashtirish   uchun   mo ljallangan   (moslashuvchan   ishlabʻ
chiqarish jarayonlari, metallurgiya, energetika va hokazolar).
Rivojlanish tarixi
Dastlabki   axborot   tizimlari   50   –   yillarda   paydo   bo ldi.   Bu   yillarda   ular	
ʻ
maosh hisob-kitoblarini qayta ishlash uchun mo ljallangan bo lib, elektromexanik	
ʻ ʻ
buxgalterlik   hisoblash   mashinalarida   amalga   oshirilgan.   Bu   qog oz   hujjatlarni	
ʻ
tayyorlashda mehnat va vaqtni bir qadar qisqartirishga olib kelgan.
60   –   yillarda   axborot   tizimlariga   munosabat   butunlay   o zgardi.   Bu	
ʻ
tizimlardan   olingan   axborot   davriy   hisobot   uchun   ko pgina   parametrlar   bo yicha	
ʻ ʻ
qo llana   boshlandi.   Buning   uchun   tashkilotlarga   ko pgina   funksiyalarga   ega	
ʻ ʻ
bo lgan EHM lar talab etila boshlandi.
ʻ
70-80 – yillarda boshlarida axborot tizimlari qarorlarni qo llab-quvvatlovchi	
ʻ
va   tezlashtiruvchi   jarayonga   ega   bo lgan   nazorat   boshgaruvi   vositalari   sifatida	
ʻ
keng foydalanila boshladi.
80   –   yillar   oxiridan   boshlab,   axborot   tizimlaridan   foydalanish   konsepsiyasi
yanada o zgarib bormoqda. Ular axborotning trategic manbayi bo lib qolmoqda va	
ʻ ʻ
istalgan sohada tashkil etishning barcha darajalarida foydalanilmoqda. Bu davrning
axborot tizimlari axborotni o z vaqtida berib, tashkilot faoliyatida muvaffaqiyatga	
ʻ
erishishga yordam bermoqda.
1.2. Onlayn chat daturi va uning imkoniyatlari
Har   qanday   katta   dasturni   kichikroq   dasturlarga   bo'lib   o'rganish   maqsadiga
ega   bo'ladi.   Bu   yerda   birinchidan,   dastur   sinxron   bo'ladi,   ikkinchidan,   sinxron
bo'ladi,   uchinchidan   dastur   kodini   kamaytiradi.   Bundan   tashqari,   dastur   kodini
kamaytiradi   va   bir   amalda   takror   yozishni   kamaytiradi.   Bundan   tashqari,   biz
sinflardan   va   sinflar   kutubxonasidan   (ClassLibrary)   foydalanamiz.   Sinflar
7 kutubxonasi   ham   o'z-o'zidan   osonlikcha   yaratadi.   Keling,   dasturning   sinxron
o'rganish printsipini o'rganishning 14-o'rinini ko'rib chiqaylik.
10-   rasm
Yuqoridagi   so'rovnomada   bir   nechta   ma'lumotlar   mavjud   va   ular   haqida
to'xtab   o'tiramiz.   Ma'lumotlar   bazasi.   Biz   yaratmoqchi   bo'lgan   dasturda
ma'lumotlar ko'p bo'lmaydi. Shundan so'ng, ma'lumotlar bazasini boshqarish tizimi
bo'lgan   Microsoft  Access-dan   foydalanamiz.   Bundan   tashqari,   C#   ti  Access   bilan
bog'langan   ma'lumotlar   bazasi   ishlatiladi.   Shunday   qilib,   Access-da     nomli
ma'lumotlar   bazasi   mavjud   va   uning   ishiga   maydonlaridan   to'g'ridan-to'g'ri
jadvalini   yaratamiz.   Ushbu   ma'lumotlar   bazasi   ishlatiladigan   ma'lumotlar   bazasi
parollari   saqlanadi.   Agar   ma'lumotlar   bazasi   ishlatilsa,   ma'lumotlar   bazasi
ishlatilsa,   ma'lumotlar   bazasi   ishlatiladi.   Agar   ma'lumotlar   bazasi   ishlatilsa,
ma'lumotlar   bazasi   ishlatiladi.  Agar   ma'lumotlar   bazasi   ishlatiladiganRegistraciya
bólimi.   Bul aynada paydalanıwshı birinshi kirip atırgOan bolsa, taza login hám parol
jazıw arqalı akkaunt jaratıwı múmkin. Jaratıl	
gOan akkaunt joqarıda aytıl	gOan bazada
saqlanadı. 
Server bólimi . Programma klient-server tiykarında jaratıl	
gOanlıqtan, 2 yamasa
onnanda kóp paydalanıwshılar óz-ara xabar almasıwı ushın dáslep “Server” bólimi
iske   qosılıwı   kerek.   Onnan   soń   basqa   klient   bólimler,   usı   “Server”   bólimine
qosılıwı   múmkin   boladı.   Bul   bólimde   chattı   baslaw   ushın   “Start”   beriw   kerek
8 boladı. “Start” berilgennen soń iske qosılgOan kompyuter ip adresi kórsetiledi. Bu ip
adresti  basqa “Klient” bólimindegiler biliwi  kerek. Sebebi  olar  usı  ip adres arqalı
qosılıw imkaniyatına iye. 
Klient   bólimi.   Klient   bóliminde   joqarıda   aytıl	
gOanınday   ip   adres   belgili
bol	
gOannan   soń,   sol   ip   adresti   jazıp   qosıladı.   Bunda   birneshe   “Klient”   bóliminen
paydalanıwshılar kiriwi múmkin. Bunda jazıl	
gOan xabarlardı “Server” hám “Klient”
aynalarında kórip turadı.
Járdenshi   klasslar.   Bul   test   programmada   bólimlerden   basqa   jáne   eki   klass
jaratıldı.   Bul   klasslardıń   wazıypası   esaplawlardı   jeńillestiriw   hámde   programma
kodın azaytıw bolıp tabıladı. Sebebi, bul  programmada bir  funkciyadan bir neshe
ret   paydalanıw   kerek   bolıp   qaladı.   Egerde   bul   funkciyanı   hár   bir   bólim   ishinde
jazıp shıqsaq programma kodı úlkeyedi hám ol bir qansha waqıttı aladı. Sonlıqtan,
bunday   funkciyalardı   joqarıda   aytıl	
gOan   klasslar	gOa   jaylastıramız   hám   olardı   kerek
waqıtta klass járdeminde shaqıramız.
1.3. Axborot tizimlarini ishlab chiqishda foydalanilgan dasturlash tillari
Har   bir   dasturiy   ta'minot   yaratishda   aniq   algoritm   ishlatiladi   va   ushbu
algoritm bo'yicha dasturlash tillaridan birida dasturiy ta'minot yaratiladi. Shunday
qilib,  dasturiy   ta'minotni   nashr   etishdan   oldin,  C#   tili   haqida   uning   paydo  bo'lish
tarixi haqida gapiraylik.
Dasturchi   ko'pincha   dasturning   samaradorligini   va   uning   tez   ishlashini
oshirish   uchun   har   qanday   vositalarni   qidiradi.   Ayrim   hollarda   biz   ko'proq
vositalarni   talab   qilamiz,   ya'ni   dasturlash   tillarini   o'rganish   paytida.   Tilning
samaradorligi   uning   tezligi   va   bir   vaqtning   o'zida   qulayligi   bilan   bog'liq   bo'ladi.
Tilning sintaksisi qisqa va yorqin bo'lishi kerak. To'g'ri kodni o'rganish orqali keng
imkoniyatlarga ega bo'lishi kerak. Bunday tillar bir-birining tili sifatida ishlatiladi.
.Net Framework-ni qo'llab-quvvatlash uchun Microsoft tomonidan yaratilgan
C# tili dasturiy ta'minotda boy merosga ega. Uning bosh me'mori Anders Heilsberg
hisoblanadi. C# - dunyodagi eng yirik kompyuter tili bo'lib, C va C++ kompyuter
9 tillarining   so'nggi   versiyasini   yaratadi.   U   C   ning   sintaksisini,   Giltlerin   so'z   va
operatorlarini meros qilib oldi.
U C++ tilida aniqlangan ob'ekt modelini ko'rish va yetkazish qobiliyatiga ega.
Bundan   tashqari,   C#   boshqa   Java   tillari   bilan   ham   yaqin   bog'liq.   C#   va   Java
o'xshash kelib chiqishi bo'lishiga qaramay, ularning ko'p qirrali ahamiyatli ta'riflari
bir-biridan   farq   qiladi   va   ularni       birodarlar       deb   atash   mumkin.⁇ ⁇   C#   1990-
yillarning   oxirida   yaratilgan   va   Microsoft   Networks   strategiyasining   bir   qismi
bo'lgan.   2000 – jıldıń ortalarında a-versiya sıpatında shıqtı. C# ning bosh me'mori
dasturlash   bo'limida   butun   dunyoga   xos   bo'lgan   Anders   Xejlsberg   (Андерс
Хежлсберг) hisoblanadi.
C#   .Net Framework shell bilan bog'liq.  C# o'ziga xos kompyuter tili bo'lsa-
da,   u   .Net   Framework   markazi   bilan   o'zaro   bog'liq   bo'ladi.   Buning   ikkita   sababi
bor.C# dasturi Microsoft kompaniyasining .Net Framework markazida joylashgan
kodni   qidirish   vositasini   o'z   ichiga   oladi.   Ikkinchidan,   ushbu   dastur   asosan   C#
tilida   ishlatilishini   kutubxona   aniqladi.   Shunday   qilib,   C#   tilida   yozilgan   dastur
Windows   operatsion   tizimida   to'liq   qidirish   vositasini   o'rnatgan   bo'lishi   kerak.
Hozirgi   kunda   C#   va   .Net   Framework-ning   bir   nechta   versiyalari   mavjud.   Ular
quyidagi jadvalda ko'rsatilgan:  
Versiya Sana .NET Visual Studio
C# 1.0 Yanvar 2002 .NET Framework 1.0 Visual Studio .NET (2002)
C# 1.1
C# 1.2 Oktyabr 2003 .NET Framework 1.1 Visual Studio .NET 2003
C# 2.0 Sentyabr 2005 .NET Framework 2.0
.NET Framework 3.0 Visual Studio 2005
C# 3.0 Avgust 2007 .NET Framework 2.0
.NET Framework 3.0
.NET Framework 3.5 Visual Studio 2008
C# 4.0 Aprel 2010 .NET Framework 4.0 Visual Studio 2010
C# 5.0 Iyun 2013 .NET Framework 4.5 Visual Studio 2012
C# 6.0 Iyul 2015 .NET Framework 4.6 Visual Studio 2015
10 .NET Core 1.0
.NET Core 1.1
C# 7.0 Mart 2017 .NET Framework 4.6.2
.NET Framework 4.7 Visual Studio 2017 15.0
C# 7.1 Avgust 2017 .NET Core 2.0 Visual Studio 2017 15.3
C# 7.2 Noyabr 2017 Visual Studio 2017 15.5
C# 7.3 May 2018 .NET Core 2.1
.NET Core 2.2
.NET Framework 4.8 Visual Studio 2017 15.7
C# 8.0 Sentyabr 2019 .NET Core 2.1
.NET Core 2.2
.NET Framework 4.8 Visual Studio 2017 1 6 .3
C# 9.0 Sentyabr 2020 .NET 5.0 Visual Studio 2017 16.8
Jadvalda Visual Studio versiyalarining dizimi ko'rsatilgan. Visual Studio bir
nechta tillarni o'z ichiga olgan dasturiy ta'minot markazidir. Onıń ishinde C++, C#,
Uning ishida C++, C#, Visual Basic va boshqa ko'plab tillar mavjud bo'lib, u butun
dunyo   bo'ylab   dasturiy   ta'minotlarni   yaratish   uchun   konsol   va   interfeyslardan
foydalanadi. 2017 yilgi dasturdan foydalanamiz.
11 Visual C# Eng aniq dasturni ishga tushirish Biz Visual Studio-ni ochamiz va
Loyiha yaratish   tugmasini bosamiz va loyihaning nomini beramiz   OK tugmasini
bosing va Visual Studio oynasi ochiladi.
Keyin   F5   tugmasini   bosamiz   va   bu   dasturni   yaratadi,   lekin   hech   narsa
bo'lmaydi.   keyingi   bosqichda   biz   shriftning   xususiyatlarini   o'rnatamiz.   shriftning
xususiyatlari quyidagi jadvalda ko'rsatilgan.
Xususiyatlari Shaklning xossalari
Name Forma atı
Text Atamalar qatarındagOı tekst 
Size Forma ólshemleri. Ya
gOnıy width formanıń eni, al height bolsa biyikligin
belgilep beredi
StartPosition Forma   birinshi   márte   orınlan	
gOanda   onıń   ekranda	gOı   ornı.   Forma   ekran
ortasında   shı	
gOıwi   múmkin   (CenterScreen)   .   Eger   bul   qásiyet   Manual
mánisin   qabıl   etken   bolsa,   onda   formanıń   jaylasatu	
gOın   ornın   Location
qásiyeti arqalı beriledi
Location Formanıń ekranda	
gOı jaylasqan ornı. Formanıń joqar	gOı tárepinen ekrannıń
joqar	
gOı   tárepine   shekem   bol	gOan   aralıq   Y,   al   formanıń   shep   tárepinen
ekranıń shep tárepine shekemgi bol	
gOan aralıq X mánislerinde beriledi
FormBorderStyle Forma   túri(shegaraları).   Forma   ápiwayı   ayna   (Sizable),   Fikserlengen
ólshemdegi   ayna(FixedSingle,Fixed3D),   dialog   aynası   (FixedDialog)
heshqanday   knopkalarsız   (SizeableToolWindow,FixedToolWindow).
Eger bul qásiyet None mánisin qabıl etken bolsa onda formada atamalar
qatarıda, shegaralarıda bolmaydı
ControlBox Bul qásiyet sistemalı menyu knopkalardıń kórinisin basqaradı. Eger bul
qásiyet   False   mánisin   qabıl   etken   bolsa,   onda   atamalar   qatarında	
gOı
jıynaw, ekrandı kishireytiw, shı	
gOıw knopkaları kórinbeydi
MaximazeBox Bul   formanı   úlkeytiw   hám   kishireytiw   knopkası.   Eger   bul   qásiyettiń
mánisi False bolsa onda usi knopka basılmaydı
MinimazeBox Bul formanı jıynaw konpkası. Eger bul qásiyettiń mánisi False bolsa usı
knopka basılmaydı
Ícon Atamalar qatarında	
gOı znachok
Font Shrift,   ol   formada
gOı   barlıq   komponentalardıń   shriftin   belgilep   beredi,
eger olardıń hárqaysısı shrift ózgertilmegen bolsa
ForeColor Reń, olda usı formada
gOı barlıq komponentalardıń tekstiniń reńin avtomat
túrde ózgertedi egerde olardıń hárqaysınıń ForeColor qásiyeti anıq túrde
kórsetilmegen bolsa
BackColor Fon reńi
12 Opacity Formanıń kóriniw dárejesi. Eger bul qásiyettiń mánisi 100% bolsa onda
forma   tolıgOı   menen   kórinip   turadı,   al   azayip   bar	gOan   sayın   forma   astıda
kórine baslaydı, al 0% bolsa formanıń ozi kórinbey qaladı. [6]
Button.   ''   Buttonning''Bu   tugma   bo'lganda   tugma   yoziladi.   Foydalanuvchi
dasturiy   ta'minotdan   xabardor   bo'lganda   o'sha   tugmani   bo'lishi   kerak.   Dastur
yaratilganda,   agar   biz   Button-dan   foydalanishni   xohlasak,   uni   kerakli   joyga
ko'chiramiz va uning ishlashiga to'sqinlik qilmaymiz. ''Clik''  vaqti ishga yoziladi .
Dastur kodi bo yicha u quyidagicha ko rinadi:	
ʻ ʻ
Private void  button1_Click( object  sender,  EventArgs  e) {}
“Button” dı forma	
gOa jaylastırıw 2 - súwrette kórsetilgen.  
2-   rasm
Biz dasturiy ta'minotda ko'pincha tugmachalardan foydalansak ham bo'ladi,
lekin   bu   dasturda   ko'pincha   tugmachalardan   foydalaniladi   va   biz   tugmacha
boshqaruv elementlarining xususiyatlari bilan tanishamiz.
Qásiyeti Atqaratu	
gOın wazıypası
Name Basqarıw elementi atı
Text Knopkada
gOı tekst
TextAlign Teksttiń   knopkada   jaylasıwı.   Tekst   knopka   ortasında   jaylasıw
múmkin(MiddleCenter),   shep   ja	
gOında(MiddleLeft),   ón   ja	gOında
(MiddleRight)
FlatStyle Stiyl.   Knopka   standart   bolıwı   múmkin   (standart),   tegis   (Flat)   yamasa
13 Popup
Loacation Knopkanıń   basqarıw   elementi   ústinde   jaylasqan   ornı.   X   knopkanıń
shep   jaqtagOÍ   shegarasınan   formanıń   shegarasna   shekem   bol	gOan   aralıq,
al   Y   bolsa   knopkanıń   joqar	
gOÍ   shegarasınan   formanıń   joqar	gOÍ
shegarasına shekemgi bol	
gOan aralıq
Size Konpka razmeri
Font Shrift, knopkada	
gOı jazıl	gOan tekst shrift
ForeColor Kopkada	
gOı tekst reńi
Enabled Knopka	
gOa dostup. Knopka basıladı eger bul qásiyet mánisi True bolsa,
basılmaydı eger False bolsa
Visible Knopkanı jasırıw imkaniyatın beredi. Eger True bolsa knopka kórinedi,
False bolsa jasıradı
Cursor Tıshqansha kórsetkishiniń knopka	
gOa bar	gOanda	gOı túrin anıqlap beredi
Ímage Bul knopka ústine súwret qoyadı
ÍmageAlign Súwrettiń   knopkada	
gOı   jaylasqan   ornın   anıqlap   beredi.   Súwret   knopka
ortasında   jaylasıwı   múmkin   (MiddleCenter),   shep   ja	
gOında
(MiddleLeft),   oń   ja	
gOında   (MiddleRight).Bunnan   basqada   súwretti
knopkada   jaylastırıw
múmkin(TopLeft,TopCenter,TopRight,BottomLeft,   BottomCenter,
BottomRight)
ÍmageList Bul   súwretler   jıyna	
gOı   bolıp   solardıń   ishinen   súwret   qoyıw	gOa   boladı.
Onıń ushın forma	
gOa ÍmageList komponentası qosıl	gOan bolıwı kerek
ÍmageÍndex Knopkada   shı	
gOatu	gOın   ÍmageList   súwretler   jıynagınan   alın	gOan   súwret
nomeri (indeksi)
ToolTip Knopka	
gOa   bar	gOanda   tishqansha   kórsetrkishi   qasında   payda   bolatu	gOın
járdemshi. Bul qásiyetti qollanıw ushın forma	
gOa ToolTip komponentası
qosıl	
gOan bolıwı kerek.
CheckBox.   CheckBox   basqarıw   elementi   kóbinese   qaldırıl	
gOan   wazıypanı
orınlaydı   ya	
gOnıy   onı   basıwdan   birden   qandayda   bir   komanda   orınlanıwı   shárt
emes.   Bul   kóbinese   paydalanıwshı   programmanı   ózine   qolaylı   qılıp   sazlap
atır	
gOanda   (nastroyka),   yamasa   kerekli   instrumentlerdi   al	gOanda   qollanıladı.  Ya	gOniy
ózine kerek bol	
gOanlarına ptichka qoyıp alıwı múmkin. CheckBox tıń “CheckState”
qásiyetinde   3   ja
gOday   bolıwı   múmkin:   belgilenbegen   (Unchecked),   belgilengen
(Checked)   hám   anıq   emes   (Índeterminate).   Bular   “ThreeState”   qásiyeti   “True”
mánisin qabıl etkende boladı, al eger “False” mánisin qabıl ece onda tek 2 ja	
gOday
(belgilengen   hám   belgilenbegen)   boladı.   “CheckState”   qásiyeti   belgilengen
14 (Checked)   hám   anıq emes (Índeterminate)  mánislerin qabıl ece onda “Checked”
qásiyeti  avtomat “True” mánisin qabıl etedi, al belgilenbegen (Unchecked)  bolsa,
onda “Checked” qásiyeti “False” mánisin qabıl etedi. Bunı programma jagOdayında
kóriwimizge boladi.
checkBox1.CheckState   =
System.Windows.Forms. CheckState . Í ndeterminate;
checkBox1.CheckState =System.Windows.Forms. CheckState .Checked;
checkBox1.Checked =  true ;
checkBox1.CheckState   =
System.Windows.Forms. CheckState .Unchecked;
checkBox1.Checked =  false ;   
3- O'sha joyda siz  ''CheckBoh '' va uning muqaddas joylarini ko'rishingiz mumkin.
3-   rasm
CheckBox boshqaruv elementini dasturning qaysi qismida ishlatish kerakligi
haqida   gapiraylik.   Bizning   dasturimiz   ham   uni   sozlash   (konfiguratsiyalash)   ga
bo'linishi   kerak.  Ya'ni   test   topshirig'ida   to'g'ri,   noto'g'ri   yuvishlar   soni,   so'rovlarni
o'tkazib   yuboradigan   tugmani   qo'shish   yoki   tasviqlash   yoki   o'tkazib   yuboradigan
bir nechta joylarda foydalanamiz. CheckBox boshqaruv elementining xususiyatlari
quyidagi jadvalda ko'rsatilgan.
15 Qásiyeti AtqaratugOın wazıypası
Text Knopka qasında jazılatu	
gOın tekst
Checked Bul onıń “CheckBox” tıń ja	
gOdayı. Eger ol “True” bolsa onda bayraqsha
belgisi qoyıladı, al eger “False” bolsa hesh nárse qoyılmaydı
TextAllign Onda tekst ja	
gOdayı. Tekst ortada jaylasıwı múmkin(MiddleCenter), shep
tárepte   (MiddleLeft),   oń   tárepte   (MiddleRight).   Bunnan   basqada   bir
neshe   túrleri   bar   (TopLeft,   TopCenter,   TopRight,   BottomLeft,
BottomCenter, BottomRight)
CheckAlign Bul   komponent   maydanında	
gOı   knopka   ja	gOdayı.   Eger   ol   joqarı   shep
jaqta	
gOı   shegara	gOa   jaqın   bolsa   onda   mánisi   “TopLeft”   ke   teń   boladı.
Bunnan basqada bir neshe ja	
gOdayları bar
Enabled Bul  komponenttiń  isletiw  yamasa  isletpew   múmkinligin  bildiredi.  Eger
“False” bolsa onda islete almaysız
Visible Bul   komponenttiń   kórsetiw   yaki   jasırıwın   basqaradı.   Eger   onıń   mánisi
“False” bolsa onda komponent kórinbeydi
AutoCheck Bul  qásiyeti  “CheckBox”  ta
gOı  súwretti  basqanda  onıń  ja	gOdayı  ózgeriwi
yaki   ózgermewin   anıqlap   beredi.   Onı   forma	
gOa   qoy	gOanıńızda   mánisi
“True” bolıp beriledi
FlatStyle Bul “CheckBox” stili. “CheckBox” standart  bolıwı  múmkin  (Standart),
tegis (Flat) yamasa “Popup” bolıwı múmkin
Appearance Ol   “ChecBox”   kórinisin   anıqlap   beredi.   Eger   onıń   mánisi   “Normal”
bolsa   ádettegidey   kóriniste   boladı,   al   eger   “Button”   bolsa   knopka
kórinisinde boladı
Ímage Komponent maydanında	
gOı súwret
ÍmageList Bul   súwretler   jıyna	
gOı   bolıp   solardıń   ishinen   súwret   qoyıw	gOa   boladı.
Onıń ushın forma	
gOa “ÍmageList” komponentası qosıl	gOan bolıwı kerek
ÍmageÍndex Knopkada   shı	
gOatu	gOın   “ÍmageList”   súwretler   jıynagınan   alın	gOan   súwret
nomeri (indeksi) 
RadioButton.   ''RadioButton''     boshqaruv   elementlari   ''CheckBox''   boshqaruv
elementlariga o'xshaydi. Ularning o'rtasida bir  muhim farq bor:  Agar bir nechta ''
RadioButton''   ni   bitta     ''GroupBox''   ga   joylashtirsak,   uning   ishidan   faqat   bitta
''RadioButton''     belgilab   qo'yiladi,   qolganlari   belgilab   qo'yilmaydi,     ''CheckBox''
ham   bo'lsa,   uni   belgilab  bo'lmaydi.    ''RadioButton  ''ThreeState  ''     xususiyati  yo'q,
ya'ni   ''CheckBox''   qo'ng'irog'ida   bo'lsa,   u   ma'lumotni   qabul   qilmaydi.
''RadioButton ''  boshqa elementlari 4-da ko'rsatilgan.
16 4-   rasm
Ushbu boshqaruv elementi ko'pchilik dasturlarda faqat bitta ma'lumotni olish
kerak   bo'lganda   ishlatiladi.   Bizning   dasturda   ham   bu   maqsad   uchun   ishlatiladi.
Masalan, foydalanuvchi o'z haqidagi ma'lumotlarni shifrlashda o'qish joyiga kirishi
kerak   bo'lsa,   boshqa   o'quvchi   uni   kasb-hunar   kollejida   bir   vaqtning   o'zida   kirishi
mumkin   emas.   Faqat   bir   narsani   tanlash   kerak.   Bunday   holatlarda   ishlatiladi.
“RadioButton” boshqaruv elementi xususiyatlari quyidagi jadvalda ko'rsatilgan.
Label.   Qo'llanma   boshqaruv   elementi   matn   ko'rinishida   bo'lib,   u   boshqa
boshqaruv elementlari haqida bilishingiz kerak bo'lgan ma'lumotlarni taqdim etadi.
U   ko'pincha   “TextBox”,   “ComboBox”   boshqaruv   elementlari   yordamida
ishlatiladi, ya'ni  qaysi  ma'lumotni  kiritish  kerakligi  matn shaklida ko'rsatiladi. Bu
boshqaruv   elementidan   foydalanish   mashinasi   “Text”   xususiyatiga   kerakli
ma'lumotni   yozish   va   uni   kerakli   joyga   olib   borish   imkonini   beradi.   Qo'llanma
boshqaruv elementlari 5-rasmda ko'rsatilgan.
Agar   ma'lumotni   ko'rsatadigan   vosita   ishlatilsa,   masalan,   so'rovnomani
to'ldirish uchun dastur bo'lsa. Agar ma'lumotni kiritish maydonining yonida qaysi
ma'lumotni   kiritganingiz   ko'rsatilmagan   bo'lsa,   u   ishlatilmaydi.   Uning   mashinasi
‘’Label’  ’ishlatiladi.   To'g'ridan-to'g'ri   foydalanuvchini   “Familiyangizni’’    kiriting,
yangi   foydalanuvchini   “Yoshingizni”     kiriting   deb   yozib   qo'ysak,   u   ishlatilishi
mumkin.
17 5-   rasm
Bizning   dasturiy   ta'minotda   sinovdan   o'tkazgandan   so'ng   muhim
ma'lumotlarni   joylashtirishni   to'xtatadi,   mukofotlanganlarni   ko'rsatadi,   shu   bilan
bir qatorda, ko'pgina boshqa elementlarni quyidagi jadvalga qo'shadi.
Qásiyeti AtqaratugOın wazıypası
Name Komponent   atı   bolıp,   ol   programma   ja	
gOdayında   onıń   basqa
qásiyetlerinen paydalanıwda qollanıladı
Text Kórinip turıwshı tekst
Location Forma ústinde jaylasqan ornı
AutoSize Komponenttiń ólshemleri avtomat túrde ózgeriwin anıqlap beredi. Eger
onıń   mánisi   True   bolsa   onda   Text   qásiyetindegi   tekstti   ózgertilse
ólshemleride avtomat ózgeredi
Size Komponent ólshemleri. Eger AutoSize qásieti False mánisin qabıl etken
bolsa ólshemlerin ózgertiwge boladı
MaximumSize Úlkeyiwi   múmkin   bol	
gOan   ólshemdi   beldilep   beredi.   Bunda
MaximumSize.Width- eni, MaximumSize.Heigth- biyikligi
Font Komponenttegi teksttiń shrift
ForeColor Komponenttegi tekst reńi
BackColor Komponent fonı reńi
TextAlign Komponenttegi   tekst   ja	
gOdayı.   Tekst   ortada   jaylasıwı
múmkin(MiddleCenter),   shep   tárepte   (MiddleLeft),   oń   tárepte
(MiddleRight).   Bunnan   basqada   bir   neshe   túrleri   bar   (TopLeft,
TopCenter, TopRight, BottomLeft, BottomCenter, BottomRight)
BorderStyle Komponent   ramkası   kórinisi.   Komponentti   forma	
gOa   jaylastırganıńizda
ramka   bolmaydı   (mánisi   None   boladı).   Ramkanıń   Fixed3D   hám
18 FixedSingle degen túrleri bar.
TextBox.   “ TextBox”   bul   tiykargOı   basqarıw   elementleriniń   biri   bolıp,
paydalanıwshı   tárepinen   tekstli   ma	
gOlıwmatlardı   kiritiwge   arnal	gOan.   “TextBox”   tı
paydalanıwda   bir   qatarlı   hám   kóp   qatarlı   qılıw   múmkin.   Bul   onıń   “MultiLine”
qásiyetindegi   mánisti   “True”   yaki   “False”   qılıp   qoyıwıńız	
gOa   baylanıslı.   Jáne
“MaxLength”   qásiyeti   arqlı   kiritiliwi   múmkin   bol	
gOan   simvollar   sanın   sheklewge
boladı. Ózi “TextBox” qa 64 kBt kólemdegi tekstti kiritiw múmkin.Bunnan úlken
kólemdegi   ma	
gOlıwmatlar   menen   islew   kerek   bolsa   onda   “RichTextBox”   tan
paydalan	
gOan maqul. “TextBox” 6- súwrette kórsetilgen.
6-rasm
                “TextBox”   basqarıw   elementi   kópshilik   programmalarda   qısqa   tekstli
ma	
gOlımatlardı   kiritiwde   paydalanıladı.   Biziń   programma   ja	gOdayında   da   usınday
wazıypanı atqaradı.Tıykarınan paydalanıwshı ózi haqqında ma
gOlıwmatlardı kiritip
atır	
gOanda   paydalanıladı.   “TextBox”   qásiyetlerin   tómendegi   kestden   kóriwińizge
boladi.
RichTextBox.     “ RichTextBox”   basqarıw   elementinde   úlken   kólemdegi
ma
gOlıwmatlardı   kiritiwge   hám   qayta   islewge   boladı.   Bunnan   basqada
“RichTextBox”   ta   tekst   reńin   redaktorlaw,   shriftin   ózgertiw,   súwret   qoyıw	
gOa
boladı. Jáne “RichTextBox” ta “Microsoft Word” tekst redaktorı múmkinshiliklerin
19 ózinde   jámlegen.   Biraq   ol   tuwrıda-   tuwrı   tek  gOana   .rtf   formatta	gOı   dokumentlerdi
oqıydı. “RichTexBox” basqarıw elementi 7- súwrette kórsetilgen.
7-rasm
                “RichTextBox”   basqarıw   elementi   test   programmasında   test   tapsırıwshı
sorawlardı oqıwı ushın paydalanıladı. Qásiyetleri tómendegi kestede:
Qásiyeti Atqaratu	
gOın wazıypası
Name Komponent   atı   bolıp,   ol   programma   ja	
gOdayında   onıń   basqa
qásiyetlerinen paydalanıwda qollanıladı
MaximumSize Úlkeyiwi   múmkin   bol	
gOan   ólshemdi   beldilep   beredi.   Bunda
“MaximumSize.Width”- eni, “MaximumSize.Heigth”- biyikligi
Font Komponent maydanında	
gOı teksttiń shrifti
ForeColor Komponent maydanında
gOı tekst reńi
BackColor Komponent fonı reńi
BorderStyle Komponent   ramkası   kórinisi.   Komponentti   forma	
gOa   jaylastırganıńizda
ramka   bolmaydı   (mánisi   “None”   boladı).   Ramkanıń   “Fixed3D”   hám
“FixedSingle” degen túrleri bar
MaxLength “RichTextBox”   qa   kiritiw   múmkin   bol	
gOan   simvollardıń   maksimal   sanı.
Dáslep ol 2147483647 sanına teń boladı
MultiLine Onıń   mánisi   “True”   bolsa   “RichTextBox”   qa   bir  neshe   qatarda   tekstler
kiritiw múmkin, “False” bolsa tek bir qatarda tekst kiritiw múmkin
ReadOnly Onıń   mánisi   “True”   bolsa   “RichTextBox”   ta	
gOı   tekstti   redaktorlaw
múmkin, “False” bolsa redaktorlay almaysız onı tek nusqalap alıwıńız	
gOa
boladı [6]
20 ComboBox. “ ComboBox” basqarıw elementinde redaktorlaw maydanı hám
dizim   bar   bolıp,   ol   magOliwmatlardı   qoldan   kiritiw   yaki   dizimnen   saylap   alıw
múmkinshiligin   beredi.   Onıń   qolaylılıq   tárepi   formadan   úlken   orın   iyelemeydi.
Paydalanıwshı   dizimdi   ashıp   onnan   kerekli   ma	
gOlıwmattı   saylap   alıwı   yaki   ózi
basqa   mánis   kiritiwi   múmkin.   “ ComboBox”     dı   forma	
gOa   jaylastırıw   8-   súwrette
kórsetilgen.
8-rasm
                “ComboBox”   basqarıw   elementin   programmada   kópshilik   ja	
gOdaylarda
paydalanıwshi jumısın jeńillestiriw maqsetinde paydalanadı. Ya	
gOnıy paydalanıwshı
bir   ma	
gOlıwmattı   qayta-qayta   qolda   termesten   dizimniń   ishinen   saylap   alıw
imkaniyatına   iye   boladı.   Bizim   programmamız   ja	
gOdayında   onı   paydalanıwshı   ózi
haqqında   ma	
gOlıwmatlar   kiritip   atır	gOanda     joqarı   oqıw   ornı   atların,   kolledj   hám
akademiyalıq   licey   atların   mektep   atların   qayta-qayta   jazıp   otırmastan   dizimnen
alıp   qoyıw   imkaniyatına   iye   boladı.   Endi   onıń   qásiyetleri   tómendegi   kestede
kórsetilgen.
OpenFileDialog.   Komponent “OpenFileDialog” bul ozimizge kerekli bol	
gOan
fayldı ashıw ushın arnal	
gOan dialog aynası. Bul komponent ózimizge kerekli fayldı
keńeytpesi   arqalı  filtirlep  beriwi   múmkin.Ya	
gOnıy  bizge  tek  keńeytpesi  *.txt,  *.rtf,
*.docx bol	
gOan fayllar  kerek bolsa  dialog aynada tek usı  fayllardı  kórsetedi. Ol  9-
súwrette kórsetilgen.
21 9-rasm
       “OpenFileDialog”  komponenti biziń programmamızda sorawlar faylın oqıtıw
(ashıw)   ushın   qollanıladı.YagOnıy   bul   fayl   qay   jerde   tur	gOan   jolın   programma
bilmeydi,   onı   usı   komponent   arqalı   tawıp   ashıwımız	
gOa   boladı.   “OpenFileDialog”
komponenti qásiyetleri tómendegi kestede kórsetilgen.
Qásiyeti Atqaratu	
gOın wazıypası
Title Aynanıń   atamalar   qatarında	
gOı   tekst.   Eger   mánis   berilmegen   bolsa   onda
aynanıń atamalar qatarında  Открыть  degen tekst turadı
Filter Bul   qásiyet   fayllardı   filtirlep   beredi.Dizimde   tek  	
gOana   keńeytpesi
kórsetilgen   fayllar	
gOana   kórinip   turadı.   Mısalı,   RTF   fayllar|*.rtf   mánis
dizimde tek 	
gOana rtf keńeytpeli fayllardı 	gOana kórsetip beredi
FileName Bul   paydalanıwshı   tárepinen   kiritilgen   yamasa   dizimnen   saylap   alın	
gOan
Fayl atı
ÍnitialDirectory Belgili   bir   katolog   ishindegi   fayllardı   dialog   aynası   ashıl	
gOanda   kórsetip
beredi [6]
Temir.   ''Temir''   boshqaruv elementi o z nomidan belgilab qo yilgan vaqtni	
ʻ ʻ
qidiradi.   Uni     ''Tik   ''     vaqti   yordamida   amalga   oshiradi.   Uning   ''   Interval   ''
xususiyatiga   ega   bo lib,     ''Tik   ''vaqtini   qancha   milisegunddan   o tishi   kerakligini	
ʻ ʻ
ko rsatishi mumkin. Dastur kodida o tishi kerak bo lgan o zgaruvchanlik quyidagi	
ʻ ʻ ʻ ʻ
''Tik''  vaqti ishiga yoziladi:
privatevoid  timer1_Tick( object  sender,  EventArgs  e)
{
}
22 2. Amaliy qism
2.1. Axborot tizimini loyihalashtirirsh
Programmanıń   eń   tiykargOı   bólegi   bul   óz-ara   tekst   xabar   almasıw   processi
esaplanadı.   Sonıqtan,   usı   bólegin   jaratıw   basqıshlarına   toqtalıp   ótemiz.   Xabar
almasıwda   System.Net.Sockets   bibliotekasında	
gOı   TcpClient   klasınan
paydalanamız. Server tárep, “Start” berilgen waqıtta endi qosılajaq bol	
gOan “Klient”
lerdi kóp waqıt kútip turıwı kerek boladı. Bunı basqa potokta ámelge asırıw kerek.
Sonıń   ushın   System.Threading   bibliotekası   ishindegi   Thread   klasınan
paydalanamız.   Sonday-aq,   xabar   almasıwda   json   formattan   paydalanıw   ushın
System.Web.Script.Serialization   bibliotekasın   qosamız.   Kerekli
bibliotekalardı qosıp bol	
gOannan soń programma dúziwdi baslaw	gOa boladı.
Server   tárepte   klientlerdi   kútiw,   esitip   turıwshı   funkciya   programmada
tómendegishe jazıldı:
private   void  Listener(IPAddress ip,  int  port)
{
    TcpListener listener =  null ;
     try
    {
        listener =  new  TcpListener(ip, port);
        listener.Start();
        Active( true );
         while  (active)
        {
             if  (listener.Pending())
            {
                 try
                {
                    MyClient obj =  new  MyClient();
                    obj.id = id;
                    obj.username =  new  StringBuilder();
                    obj.client = listener.AcceptTcpClient();
                    obj.stream = obj.client.GetStream();
                    obj.buffer =  new   byte [obj.client.ReceiveBufferSize];
                    obj.data =  new  StringBuilder();
                    obj.handle =  new  EventWaitHandle( false , 
EventResetMode.AutoReset);
                    Thread th =  new  Thread(() => Connection(obj))
                    {
                        IsBackground =  true
                    };
                    th.Start();
                    id++;
                }
23                  catch  (Exception ex)
                {
                    Log(ErrorMsg(ex.Message));
                }
            }
             else
            {
                Thread.Sleep(500);
            }
        }
        Active( false );
    }
     catch  (Exception ex)
    {
        Log(ErrorMsg(ex.Message));
    }
     finally
    {
         if  (listener !=  null )
        {
            listener.Server.Close();
         }
    }
}
Kelgen   xabarlard ı  sh ıgO ar ı wsh ı  funkciya   t ó mendegishe   bolad ı:
private   void  Send( string  msg, MyClient obj)
{
     if  (send ==  null  || send.IsCompleted)
    {
        send = Task.Factory.StartNew(() => BeginWrite(msg, obj));
    }
     else
    {
        send.ContinueWith(antecendent => BeginWrite(msg, obj));
    }
}
Chattı   toqtatıwshı   baylanıstı   úziwshi   funkciya   tómendegishe   kóriniste
jazıladı:
private   void  Disconnect( long  id = -1)
{
     if  (disconnect ==  null  || !disconnect.IsAlive)
    {
        disconnect =  new  Thread(() =>
        {
             if  (id >= 0)
            {
                clients.TryGetValue(id,  out  MyClient obj);
                obj.client.Close();
                RemoveFromGrid(obj.id);
            }
             else
            {
                 foreach  (KeyValuePair< long , MyClient> obj  in  clients)
24                 {
                    obj.Value.client.Close();
                    RemoveFromGrid(obj.Value.id);
                }
            }
        })
        {
            IsBackground =  true
        };
        disconnect.Start();
    }
}
Server   tárepte   “startButton”   túymesi   basılgOanda   esitiwdi   baslaydı.   Usı   kod
tómendegishe:
private   void  startButton_Click( object  sender, EventArgs e)
{
     if  (active)
    {
        active =  false ;
    }
     else   if  (listener ==  null  || !listener.IsAlive)
    {
         string  address = addrTextBox.Text;
         bool  error =  false ;
        IPAddress ip =  null ;
         if  (address.Length < 1)
        {
            error =  true ;
            Log(SystemMsg( "Adres tolıq jazılıwı kerek" ));
        }
         else
        {
             try
            {
                ip = Dns.Resolve(address).AddressList[0];
            }
             catch
            {
                error =  true ;
                Log(SystemMsg( "Adres nadurıs kiritilgen" ));
            }
        }
         if  (!error)
        {
            listener =  new  Thread(() => Listener(ip, 8080))
            {
                IsBackground =  true
            };
            listener.Start();
        }
    }
}
25   “Klient”   tárepten   “Server”   ge   qosılıw   ushın   “connectButton”   túymesi
basılıwı kerek. Bul túyme ishindegi kod tómendegishe boladı:
private   void  connectButton_Click( object  sender, EventArgs e)
{
     if  (connected)
    {
        obj.client.Close();
    }
     else   if  (client ==  null  || !client.IsAlive)
    {
         string  address = addrTextBox.Text.Trim();
         bool  error =  false ;
        IPAddress ip =  null ;
         if  (address.Length < 1)
        {
            error =  true ;
            Log(SystemMsg( "Adres tolıq jazılıwı kerek" ));
        }
         else
        {
             try
            {
                ip = Dns.Resolve(address).AddressList[0];
            }
             catch
            {
                error =  true ;
                Log(SystemMsg( "Adres nadurıs kiritilgen" ));
            }
        }
         if  (!error)
        {
            client =  new  Thread(() => Connection(ip, 8080, username, 
keyTextBox.Text))
            {
                IsBackground =  true
            };
            client.Start();
        }
    }
}
Kerekli xabar jazılgOannan soń, onı jiberiw ushın “Enter” klavishası basıl	gOanda
tómendegi kod orınlanadı:
private   void  Client_KeyDown( object  sender, KeyEventArgs e)
{
     if  (e.KeyCode == Keys.Enter)
    {
        e.Handled =  true ;
        e.SuppressKeyPress =  true ;
         if  (sendTextBox.Text.Length > 0)
        {
26              string  msg = sendTextBox.Text;
            sendTextBox.Clear();
            Log( string .Format( "{0} (Siz): {1}" , obj.username, msg));
             if  (connected)
            {
                Send(msg);
            }
        }
    }
}
2.2. Onlayn chat tizimi interfeysi
Eng  yaxshi   chat   dasturini  ishga  tushirganingizda,  11-rasmda  ko'rsatilgandek,
“Kirish”   oynasi   ochiladi.   ”Server”   “Mijoz”   oynasiga   kirishingiz   mumkin,   agar
foydalanuvchi   allaqachon   kirgan   bo'lsa,   ro'yxatdan   o'tish   oynasiga   o'tishingiz
mumkin.
11-rasm
27 “Taza   akkunt   jaratıw”   basılsa,   “Registraciya”   aynasına   ótiledi.   Bul
tómendegishe kóriniste:
12-rasm
Login hám paroller jazılıp “Registaciya” túymesi basılsa, bazagOa taza akkaunt
saqlanadı. Onnan soń “Kiriw” basılsa, qaytadan “Kiriw” aynasına ótiledi  hám sol
jerde   jaratıl	
gOan   login   hám   paroldi   jazıp   kiriw   múmkin.   “Kiriw”   aynasınan   qaysı
ayna	
gOa   ótiw   kerekliginde   saylaw   kerek   boladı.   Máselen,   “Server”   aynasına
ótpekshi   bolsańız,   “Server”   ge   belgi   qoyıwıńız   kerek.   “Server”   aynası
tómendegishe kóriniste:
28 13-rasm
Egerde “Kiriw” bóliminen “Klient” ke belgi qoysańız onda sol aynagOa ótesiz:
Eki   ayna   internetke   jal	
gOan	gOan   basqa-basqa   kompyuterlerde   iske   qosılıp,   óz-
ara   xabar   almasıwları   múmkin.   Onıń   ushın   “Server”   aynasınan   “Start”   túymesi
basıladı.   Onnan   soń,   “Klient”   aynasınan   “Server”   kompyuterdiń   ip   adresi   jazılıp
“Qosılıw”,   tugmasi   bosib   turilsa,   hech   qanday   aloqa   o'rnatilmaydi.   “Server”
tárepten   parol   jazılıwıda   múmkin.  Bunda   “Klient”   táreptegiler   de   sol   parol   arqalı
chatqa kire aladı. Eger parol qáte jazılsa, onda kire almaydı. “Server” tárep chattı
29 qálegen   waqıtta   toqtatıwı,   yamasa   “Klient”   paydalanıwshılardı   chattan   shıgOarıp
jiberiw imkaniyatinada iye. 
15-rasm
Xulosa
Bul   kurs   jumısında   aralıqtan   turıp   xabar   almasıwshı   chat   programmasın
jaratıw   máselesi   qaraldı.   Onı   ámelge   asırıw   ushın     C#   programmalastırıw   tilinde
programma dúzili basqıshları, onıń islew algortimi, C# tilinen paydalanıwdı kórip
shıqtıq.
30 Hárqanday programmanı jaratıwdan aldın C# haqqında jeterlishe túsiniklerge
iye   bolıw   kerek.   Sonlıqtan,   C#   jaratılıw   tariyxi,     kelip   shıgOıwı   onıń   .Net
Framework penen baylanısı haqqında aytıp óttik. 
Visual   C#   tıń   komponentaları,   basqarıw   elementleri   olardıń   qásiyetleri
waqıyaları   hám   olardıń   is   júzinde   qollanılıwı   menen   tanısıp   shıqtıq.   Bul
programma dúziwden aldın biliw kerek bol	
gOan bilim hám  kónlikpeler esaplanadı.
Sebebi, olardı bilmesten aldın programmanı jaratıw múmkin emes.  
Chat   programmanı   dúziwden   aldın   onıń   ulıwma   sxeması,     islew   principleri,
olardı   bir   neshe   bólimlerge   bóliw   hámde   hár   bir   bólimniń   atqaratu	
gOın
wazıypalarına toqtalıp óttik. 
Álbette, programma jaratıl	
gOannan soń onı paydalanıwshılar ushın túsinikliligi,
qolaylı   táreplerin   aytıp   ótiw   kerek.   Eń   soń	
gOı   paragrafta   usı   máseleler   qaraldı.
Ya	
gOnıy bunda programma interfeysi, hár bir ayna haqqında, tanıstırıp óttik. 
Juwmaqlap aytqanda bul programma arqalı bir qansha jetiskenliklerge eristi:
 Internet   arqalı   birneshe   kompyuterler   arqalı   baylanısıp   xabar   almasıw
múmkin;
 Programma kólemi kishi hám jeńil isleydi;
 Programmadan   tek	
gOana   belgili   bir   sheńberdegi   adamlar   paydalanadı.
Sonlıqtan, basqalar
gOa salıstır	gOanda qáwipsiz desek aljaspaymız;
Chat   programmanı   dúziwde   bir   neshe   funkciyalar   hám   klasslar   jarattıq.
Funkciya hám klasslar programma kólemin azaytadı  hámde programmanı ıqsham
(qolaylı)   kóriniske   alıp   keledi.   Bunda   bir   wazıypanı   orınlaw   ushın   qayta-qayta
programmada   kod   jazıp   otırıw   shárt   emes,   al   jaratıl	
gOan   usı   wazıypanı   atqarıwshı
arnawlı   funkciyalardı   shaqırıw   jetkilikli   boladı.   Sonıń   ushın,   test   programmada	
gOı
jaratıl	
gOan   funkciyalar     hám   olardıń   atqaratu	gOın   wazıypalarına   keńirek     toqtalıp
óttik.
31 Foydalanilgan adabiyotlar
1. Абрамян   М.Э.,   Visual   C #   на   примерах.   –   Санкт   Петербург.:   БХВ   –
Петербург, 2008. – 496 c .
2. Герберт   Шилдт.,   Полный   справочник   по   С#.:   Пер.   с   англ.—М.:   Вильямс,
2004.—752с.
32 3. Карли   Уотсон,   Кристиан   Нейгел,   Якоб   Хаммер   Педерсен,   Джон   Рид,
Морган Скиннер.,   Visual   C # 2010: Польный курс.: Пер. с англ. – М.: ООО
И.Д. Вильямс, 2011. – 960 c .
4. Культин   Н.Б.,   Microsoft   Visual   C #   в   задачах   и   примерах.   –   СПб.:   БХВ   –
Петербург, 2009. – 320с.
5. Джозеф Албахари, « C# 7.0. Справочник. Полное описание языка ».
6. Виссер Джуст, « Разработка  обслуживаемых программ  на языке C#  », М:
ДМК-Пресс, 2017.
7. Enrico   Buonanno ,   « Functional   Programming   in   C#:   How   to   write   better   C#
code», 2017.
8. Кристов Вилле, « Предствавляем С# » М: ДМК-Пресс
9. П.   В.   Евдокимов,   «   C#   на   примерах.   4-е   издание   »,   М:   Наука   и   Техника,
2019.
10. Мюллер Джон Пол, « С# для чайников », М: Диалектика, 2019.
11. А.   Васильев,   «Программирование   на   С#   для   начинающих.   Особенности
языка », М: Эксмо, 2019.
12. Троелсен   Эндрю,   Джепикс   Филип,   «   Язык   программирования   C#   7   и
платформы .NET и .NET Core », М: Диалектика, 2018.
13. Эндрю   Стиллмен,   Дженнифер   Грин,   «Изучаем   С#.   3-е   издание   »,   Питер,
2014
14. А. Хейлсберг, М. Торгерсен, С. Вилтамут, « Язык программирования C# »,
Питер, 2012.
15. Bruce Johnson       Professional Visual Studio 2017   , John Wiley & Sons,⁇ ⁇
Inc.
Ilovalar
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
33 using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Windows.Forms;
namespace login_and_Register_System
{
    public partial class Server : Form
    {
        private bool active = false;
        private Thread listener = null;
        private long id = 0;
        private string username = "";
        private struct MyClient //Struktura
        {
            public long id;
            public StringBuilder username;
            public TcpClient client;
            public NetworkStream stream;
            public byte[] buffer;
            public StringBuilder data;
            public EventWaitHandle handle;
        };
        private ConcurrentDictionary<long, MyClient> clients = new 
ConcurrentDictionary<long, MyClient>();
        private Task send = null;
        private Thread disconnect = null;
        private bool exit = false;
        public Server()
        {
            InitializeComponent();
            this.ControlBox = false;
            this.MaximizedBounds = Screen.FromHandle(this.Handle).WorkingArea;
        }
        #region
        private void Log(string msg = "")  //Xabardi shigariw
        {
            if (!exit)
            {
                logTextBox.Invoke((MethodInvoker)delegate
                {
                    if (msg.Length > 0)
                    {
                        logTextBox.AppendText(string.Format("[ {0} ] {1}{2}", 
DateTime.Now.ToString("HH:mm"), msg, Environment.NewLine));
                    }
                    else
                    {
                        logTextBox.Clear();
                    }
                });
            }
        }
        private string ErrorMsg(string msg) //Qatelik haqqinda magliwmat qaytariw
        {
            return string.Format("Qátelik: {0}", msg);
34         }
        private string SystemMsg(string msg)
        {
            return string.Format("{0}", msg);
        }
        private void Active(bool status) //Chatti qosiw yamasa oshiriw
        {
            if (!exit)
            {
                startButton.Invoke((MethodInvoker)delegate
                {
                    active = status;
                    if (status)
                    {
                        addrTextBox.Enabled = false;
                        keyTextBox.Enabled = false;
                        startButton.Text = "Stop";
                        Log(SystemMsg("Chat ashıldı!"));
                    }
                    else
                    {
                        addrTextBox.Enabled = true;
                        keyTextBox.Enabled = true;
                        startButton.Text = "Start";
                        Log(SystemMsg("Chat toqtatıldı!"));
                    }
                });
            }
        }
        private void AddToGrid(long id, string name) //Kestege taza paydalaniwshi 
qosiw
        {
            if (!exit)
            {
                clientsDataGridView.Invoke((MethodInvoker)delegate
                {
                    string[] row = new string[] { id.ToString(), name };
                    clientsDataGridView.Rows.Add(row);
                    totalLabel.Text = string.Format("Chat qatnasıwshıları sanı: {0}", 
clientsDataGridView.Rows.Count);
                });
            }
        }
        private void RemoveFromGrid(long id) //Kesteden paydalaniwshini oshiriw
        {
            if (!exit)
            {
                clientsDataGridView.Invoke((MethodInvoker)delegate
                {
                    foreach (DataGridViewRow row in clientsDataGridView.Rows)
                    {
                        if (row.Cells["identifier"].Value.ToString() == id.ToString())
                        {
                            clientsDataGridView.Rows.RemoveAt(row.Index);
                            break;
35                         }
                    }
                    totalLabel.Text = string.Format("Chat qatnasıwshıları sanı: {0}", 
clientsDataGridView.Rows.Count);
                });
            }
        }
        private void Read(IAsyncResult result) // Chatqa qosiliw
        {
            MyClient obj = (MyClient)result.AsyncState;
            int bytes = 0;
            if (obj.client.Connected)
            {
                try
                {
                    bytes = obj.stream.EndRead(result);
                }
                catch (Exception ex)
                {
                    Log(ErrorMsg(ex.Message));
                }
            }
            if (bytes > 0)
            {
                obj.data.AppendFormat("{0}", Encoding.UTF8.GetString(obj.buffer, 0, 
bytes));
                try
                {
                    if (obj.stream.DataAvailable)
                    {
                        obj.stream.BeginRead(obj.buffer, 0, obj.buffer.Length, new 
AsyncCallback(Read), obj);
                    }
                    else
                    {
                        string msg = string.Format("{0}: {1}", obj.username, 
obj.data);
                        Log(msg);
                        Send(msg, obj.id);
                        obj.data.Clear();
                        obj.handle.Set();
                    }
                }
                catch (Exception ex)
                {
                    obj.data.Clear();
                    Log(ErrorMsg(ex.Message));
                    obj.handle.Set();
                }
            }
            else
            {
                obj.client.Close();
                obj.handle.Set();
            }
        }
        private void ReadAuth(IAsyncResult result)
36         {
            MyClient obj = (MyClient)result.AsyncState;
            int bytes = 0;
            if (obj.client.Connected)
            {
                try
                {
                    bytes = obj.stream.EndRead(result);
                }
                catch (Exception ex)
                {
                    Log(ErrorMsg(ex.Message));
                }
            }
            if (bytes > 0)
            {
                obj.data.AppendFormat("{0}", Encoding.UTF8.GetString(obj.buffer, 0, 
bytes));
                try
                {
                    if (obj.stream.DataAvailable)
                    {
                        obj.stream.BeginRead(obj.buffer, 0, obj.buffer.Length, new 
AsyncCallback(ReadAuth), obj);
                    }
                    else
                    {
                        JavaScriptSerializer json = new JavaScriptSerializer(); // 
feel free to use JSON serializer
                        Dictionary<string, string> data = 
json.Deserialize<Dictionary<string, string>>(obj.data.ToString());
                        if (!data.ContainsKey("username") || data["username"].Length <
1 || !data.ContainsKey("key") || !data["key"].Equals(keyTextBox.Text))
                        {
                            obj.client.Close();
                        }
                        else
                        {
                            obj.username.Append(data["username"].Length > 200 ? 
data["username"].Substring(0, 200) : data["username"]);
                            Send("{\"status\": \"authorized\"}", obj);
                        }
                        obj.data.Clear();
                        obj.handle.Set();
                    }
                }
                catch (Exception ex)
                {
                    obj.data.Clear();
                    Log(ErrorMsg(ex.Message));
                    obj.handle.Set();
                }
            }
            else
            {
                obj.client.Close();
                obj.handle.Set();
            }
        }
37         private bool Authorize(MyClient obj) // Avtorizaciya, paroldi tekseriw arqali 
qosiliw
        {
            bool success = false;
            while (obj.client.Connected)
            {
                try
                {
                    obj.stream.BeginRead(obj.buffer, 0, obj.buffer.Length, new 
AsyncCallback(ReadAuth), obj);
                    obj.handle.WaitOne();
                    if (obj.username.Length > 0)
                    {
                        success = true;
                        break;
                    }
                }
                catch (Exception ex)
                {
                    Log(ErrorMsg(ex.Message));
                }
            }
            return success;
        }
        private void Connection(MyClient obj) //Taza paydalaniwshi qosiliwi ham shigiw
        {
            if (Authorize(obj))
            {
                clients.TryAdd(obj.id, obj);
                AddToGrid(obj.id, obj.username.ToString());
                string msg = string.Format("{0} chatqa qosıldı", obj.username);
                Log(SystemMsg(msg));
                Send(SystemMsg(msg), obj.id);
                while (obj.client.Connected)
                {
                    try
                    {
                        obj.stream.BeginRead(obj.buffer, 0, obj.buffer.Length, new 
AsyncCallback(Read), obj);
                        obj.handle.WaitOne();
                    }
                    catch (Exception ex)
                    {
                        Log(ErrorMsg(ex.Message));
                    }
                }
                obj.client.Close();
                clients.TryRemove(obj.id, out MyClient tmp);
                RemoveFromGrid(tmp.id);
                msg = string.Format("{0} chattan shıqtı", tmp.username);
                Log(SystemMsg(msg));
                Send(msg, tmp.id);
            }
        }
        private void Listener(IPAddress ip, int port) //Esitip turiw, taza 
paydalaniwshi keliwin kutip turiw
38         {
            TcpListener listener = null;
            try
            {
                listener = new TcpListener(ip, port);
                listener.Start();
                Active(true);
                while (active)
                {
                    if (listener.Pending())
                    {
                        try
                        {
                            MyClient obj = new MyClient();
                            obj.id = id;
                            obj.username = new StringBuilder();
                            obj.client = listener.AcceptTcpClient();
                            obj.stream = obj.client.GetStream();
                            obj.buffer = new byte[obj.client.ReceiveBufferSize];
                            obj.data = new StringBuilder();
                            obj.handle = new EventWaitHandle(false, 
EventResetMode.AutoReset);
                            Thread th = new Thread(() => Connection(obj))
                            {
                                IsBackground = true
                            };
                            th.Start();
                            id++;
                        }
                        catch (Exception ex)
                        {
                            Log(ErrorMsg(ex.Message));
                        }
                    }
                    else
                    {
                        Thread.Sleep(500);
                    }
                }
                Active(false);
            }
            catch (Exception ex)
            {
                Log(ErrorMsg(ex.Message));
            }
            finally
            {
                if (listener != null)
                {
                    listener.Server.Close();
                }
            }
        }
        private void Write(IAsyncResult result) //Xabar jaziw
        {
            MyClient obj = (MyClient)result.AsyncState;
            if (obj.client.Connected)
            {
39                 try
                {
                    obj.stream.EndWrite(result);
                }
                catch (Exception ex)
                {
                    Log(ErrorMsg(ex.Message));
                }
            }
        }
        private void BeginWrite(string msg, MyClient obj) // Xabardi arnawli klientke 
jiberiw
        {
            byte[] buffer = Encoding.UTF8.GetBytes(msg);
            if (obj.client.Connected)
            {
                try
                {
                    obj.stream.BeginWrite(buffer, 0, buffer.Length, new 
AsyncCallback(Write), obj);
                }
                catch (Exception ex)
                {
                    Log(ErrorMsg(ex.Message));
                }
            }
        }
        private void BeginWrite(string msg, long id = -1) //Xabardi hammege jiberiw
        {
            byte[] buffer = Encoding.UTF8.GetBytes(msg);
            foreach (KeyValuePair<long, MyClient> obj in clients)
            {
                if (id != obj.Value.id && obj.Value.client.Connected)
                {
                    try
                    {
                        obj.Value.stream.BeginWrite(buffer, 0, buffer.Length, new 
AsyncCallback(Write), obj.Value);
                    }
                    catch (Exception ex)
                    {
                        Log(ErrorMsg(ex.Message));
                    }
                }
            }
        }
        private void Send(string msg, MyClient obj)
        {
            if (send == null || send.IsCompleted)
            {
                send = Task.Factory.StartNew(() => BeginWrite(msg, obj));
            }
            else
            {
                send.ContinueWith(antecendent => BeginWrite(msg, obj));
            }
40         }
        private void Send(string msg, long id = -1)
        {
            if (send == null || send.IsCompleted)
            {
                send = Task.Factory.StartNew(() => BeginWrite(msg, id));
            }
            else
            {
                send.ContinueWith(antecendent => BeginWrite(msg, id));
            }
        }
        private void SendTextBox_KeyDown(object sender, KeyEventArgs e) // Xabar jazip
Enter klavishasin basqan waqitta
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;
                e.SuppressKeyPress = true;
                if (sendTextBox.Text.Length > 0)
                {
                    string msg = sendTextBox.Text;
                    sendTextBox.Clear();
                    Log(string.Format("{0} (Siz): {1}", username, msg));
                    Send(string.Format("{0}: {1}", username, msg));
                }
            }
        }
        private void Disconnect(long id = -1) //Baylanisti toqtatiw
        {
            if (disconnect == null || !disconnect.IsAlive)
            {
                disconnect = new Thread(() =>
                {
                    if (id >= 0)
                    {
                        clients.TryGetValue(id, out MyClient obj);
                        obj.client.Close();
                        RemoveFromGrid(obj.id);
                    }
                    else
                    {
                        foreach (KeyValuePair<long, MyClient> obj in clients)
                        {
                            obj.Value.client.Close();
                            RemoveFromGrid(obj.Value.id);
                        }
                    }
                })
                {
                    IsBackground = true
                };
                disconnect.Start();
            }
        }
41         public static string GetLocalIPAddress() //Ozinin ip adresin aniqlaw
        {
            var host = Dns.GetHostEntry(Dns.GetHostName());
            foreach (var ip in host.AddressList)
            {
                if (ip.AddressFamily == AddressFamily.InterNetwork)
                {
                    return ip.ToString();
                }
            }
            throw new Exception("IPv4 adresinde islewshi tarmaq adapteri joq!");
        }
        #endregion
        public void setName(string username) //Server aynadagi login atti kiritiw
        {
            if (username != "")
                this.username = username;
        }
        private void startButton_Click(object sender, EventArgs e)
        {
            if (active)
            {
                active = false;
            }
            else if (listener == null || !listener.IsAlive)
            {
                string address = addrTextBox.Text;
                //string username = usernameTextBox.Text.Trim();
                bool error = false;
                IPAddress ip = null;
                if (address.Length < 1)
                {
                    error = true;
                    Log(SystemMsg("Adres tolıq jazılıwı kerek"));
                }
                else
                {
                    try
                    {
                        ip = Dns.Resolve(address).AddressList[0];
                    }
                    catch
                    {
                        error = true;
                        Log(SystemMsg("Adres nadurıs kiritilgen"));
                    }
                }
                if (!error)
                {
                    listener = new Thread(() => Listener(ip, 8080))
                    {
                        IsBackground = true
42                     };
                    listener.Start();
                }
            }
        }
        private void clearButton_Click(object sender, EventArgs e)
        {
            Log();
        }
        private void disconnectButton_Click(object sender, EventArgs e)
        {
            Disconnect();
        }
        private void checkBox_CheckedChanged(object sender, EventArgs e)
        {
            if (keyTextBox.PasswordChar == '*')
            {
                keyTextBox.PasswordChar = '\0';
            }
            else
            {
                keyTextBox.PasswordChar = '*';
            }
        }
        private void clientsDataGridView_CellClick(object sender, 
DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.ColumnIndex == 
clientsDataGridView.Columns["dc"].Index)
            {
                
long.TryParse(clientsDataGridView.Rows[e.RowIndex].Cells["identifier"].Value.ToString(
), out long id);
                Disconnect(id);
            }
        }
        private void Server_FormClosing(object sender, FormClosingEventArgs e)
        {
            exit = true;
            active = false;
            Disconnect();
            Application.Exit();
        }
        private void sendTextBox_KeyDown_1(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                e.Handled = true;
                e.SuppressKeyPress = true;
                if (sendTextBox.Text.Length > 0)
                {
                    string msg = sendTextBox.Text;
43                     sendTextBox.Clear();
                    Log(string.Format("{0} (Siz): {1}", username, msg));
                    Send(string.Format("{0}: {1}", username, msg));
                }
            }
        }
        private void Server_Load(object sender, EventArgs e)
        {
            addrTextBox.Text = GetLocalIPAddress();
        }
        //Panel arqali formani jilistiriw
        private void panelTitleBar_MouseDown(object sender, MouseEventArgs e)
        {
            ReleaseCapture();
            SendMessage(this.Handle, 0x112, 0xf012, 0);
        }
        [DllImport("user32.DLL", EntryPoint = "ReleaseCapture")]
        private extern static void ReleaseCapture();
        [DllImport("user32.DLL", EntryPoint = "SendMessage")]
        private extern static void SendMessage(System.IntPtr hWnd, int wMsg, int 
wParam, int lParam);
        //shigiw
        private void btnCLose_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
        //toliq ekran
        private void btnMaximize_Click(object sender, EventArgs e)
        {
            if (WindowState == FormWindowState.Normal)
                this.WindowState = FormWindowState.Maximized;
            else
                this.WindowState = FormWindowState.Normal;
        }
        //tomenge jiynaw
        private void btnMinimize_Click(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Minimized;
        }
    }
}
44

43

Sotib olish
  • O'xshash dokumentlar

  • Access dasturi yordamida “dorixona” ma‘lumotlar bazasini yaratish
  • Agile va Scrum metodologiyalari dasturiy ta'minot ishlab chiqish
  • Tashkilot miqyosida masofadan muloqot qilish.
  • Talabalar haqida ma'lumot saqlovchi tizim
  • HTML tili, uning asosiy elementlari. Jadval va rasm hosil qilish. Gipermatn va freymlar joylashtirish

Xaridni tasdiqlang

Ha Yo'q

© Copyright 2019-2025. Created by Foreach.Soft

  • Balansdan chiqarish bo'yicha ko'rsatmalar
  • Biz bilan aloqa
  • Saytdan foydalanish yuriqnomasi
  • Fayl yuklash yuriqnomasi
  • Русский