A9. Hodisalarga doir masala yechish
Windows Forms da foydalanuvchi bilan muloqot uchun hodisalar mexanizmi
qoʻllaniladi. Windows Formsda hodisalar faqat C# ning visual komponentalariga
qoʻllaniladigan standart hodisalarini ifodalaydi va C# ning hodisalari boʻysunadigan
qoidalarga amal qiladi. Lekin Windows Formsda
hodisalarni qayta ishlovchisini yaratish ham oʻziga
xos xususiyatlarga ega.
WinFormsda bir qator standart xodisalar
toʻplami mavjud, ularning kattagina qismi barcha
visual komponentalarda keltirilgan. Alohida
elementlar oʻz xodisalarini qoʻshadi, lekin ular
bilan ishlash prinsipi juda oʻxshash. Elementning
barcha xodisalarini koʻrish uchun grafik dizayner
maydonidan shu elementni tanlash va forma
panelida xodisalar boʻlimiga oʻtish zarur. Masalan,
forma xodisalari:
Hodisani qayta ishlovchini qoʻshish uchun
hodisa nomining yonidagi boʻsh maydonda
sichqonchaning oʻng tugmasini ikki marta bosish
yetarli, shundan soʻng Visual Studio hodisani
qayta ishlashni avtomatik generatsiyalaydi.
Masalan, Load hodisasini qayta ishlovchini
yaratish uchun:
Bu maydonda Load hodisasini qayta ishlovchi metod nomi aks etgsn. Sukut
boʻyicha u
Form1_Load deb nomlanadi.
Agar
Form1.cs kod fayliga oʻtsak, unda avtomatik generatsiyalangan
Form1_Load metodini koʻrishimiz mumkin:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
Formaning har bir yuklanishida
Form1_Load hodisasi uchun yozilgan kod
ishga tushadi.
Odatda, koʻpchilik turli visual komponentalar hodisa ishlovchilari ikkita
parametrga ega boʻladi:
sender – hodisa initsializatsiyalangan ob’yekt va hodisa
haqidagi ma’lumotni saqlovchi argument (mazkur holatda
EventArgs e).
Lekin bu faqat qayta ishlovchi. Bunday usulda yaratilgan qayta ishlovchini
qoʻshish Form1.Designer.cs faylida amalga oshiriladi:
namespace HelloApp
{
partial class Form1
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.SuspendLayout();
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(284, 261);
this.Name = "Form1";
// hodisa ishlovchini qoʻshish
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
}
}
Hodisa ishlovchisini qoʻshish uchun standart C# sintaksisi qoʻllaniladi:
this.Load += new System.EventHandler(this.Form1_Load)
Shu sababli bunday usulda yaratilgan hodisa ishlovchisini oʻchirish uchun
nafaqat Form1.cs forma kodidan metodni, balki hodisa ishlovchisini qoʻshishni ham
oʻchirish talab qilinadi.
Shu bilan birga, hodisa ishlovchisini dasturiy ravishda, masalan, forma
konstruktorida qoʻshish ham mumkin:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace HelloApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Load += LoadEvent;
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void LoadEvent(object sender, EventArgs e)
{
this.BackColor = Color.Yellow;
}
}
}
Oldin yaratilgan Form1_Load hodisa ishlovchisidan tashqari bu yerda fon
sifatida sariq rangni oʻrnatuvchi boshqa formani yuklash ishlovchisi ham qoʻshilgan:
this.Load += LoadEvent
Foydalanish uchun adabiyot va manbalar:
1. Троелсен Эндрю, Джепикс Филипп. Язык программирования C# 7 и
платформы .NET и .NET Core. Вильямс. 2018
2. A. Troelsen, P. Japikse. Pro C# 8 with .NET Core. Foundational Principles and
Practices in Programming. Apress, 2020
3. Албахари Бен, Албахари Джозеф. C# 7.0. Справочник. Полное описание языка.
Пер. с англ.-СПб: “Альфа-книга”, 2018, -1024 с.
4.
https://metanit.com/sharp/tutorial/3.14.php
|