PDA

View Full Version : Delegate ,Event ,Event Handler , EventArg....



programmable
یک شنبه 12 فروردین 1386, 19:58 عصر
من هر چی در مورد مطالب بالا مطالعه میکنم متوجه مفهوم اونها و ارتباط اونا با هم در برنامه نویسی نمیشم.
اگه لطف کنید طوری توصیح بدید که ابتدا مفهوم هرکدام از موارد و سپس مثال عملی از کاربرد و ارتباط اونا در طول برنامه رو شامل بشه ممنون میشم.

reza.palang
یک شنبه 12 فروردین 1386, 20:23 عصر
بابا تو دیگه کی هستی؟
اینا خودشون حد اقل 20و 30 صفحه میشه.
اول بگو از رو چی خوندی؟

Alireza_Salehi
یک شنبه 12 فروردین 1386, 21:07 عصر
Event رویدادیه که بر اثر یک واقعه مثل فشردن کلید ، کلیک موس ، صفر شدن یک متغییر ، بستن فرم و .... ایجاد میشه و ما رو قادر میکنه در اثر اون رویداد عمل مناسب رو انجام بدیم.

Event Handler روال یا تابعی است که در هنگام بروز رویداد فراخوانی میشه که به عنوان پارامتر شی ایجاد کننده و پارامترهای رویداد (کدام کلید کیبورد، کدام کلید موس، کدام ویژگی های شی و ... ) به اون ارسال میشه.

EventArg پارامتر هایی که در هنگام یک رویداد (Event) به روال مدیریت کننده آن رویداد ارسال می شوند(که بسته به نوع رویداد، منبع رویداد و شی مورد نظر فر می کنه)

مثلا رویداد کلیک شدن روی فرم:


private void Form1_Click(object sender, EventArgs e)
{
//کارهایی که در هنگام کلیک باید انجام بشه
}

Form1_Click نام تابع مدیریت کننده رویداد که میتونه به دلخواه عوض بشه!
sender ایجاد کننده رویداد
e پارامتر های رویداد مورد نظر

مثلا مشخص کردن این که تابع مدیریت کننده کلیک فرم اسمش چیه (امیدوارم this بدونید چیه):


this.Click += new System.EventHandler(this.Form1_Click);

Form1_Click نام تابع مدیریت کننده

Delegate در واقع برای فراخوانی توابعی هستند که ساختار آنها را نمی دانیم ولی نوع خروجی و نوع و تعداد پارامتر های ورودی آن را میدانیم ، در واقع برای فراخوانی توابعی که نمیشناسیم هستند ، برای توسعه برنامه و اضافه کردن قابلیت جدید به برنامه و... .
در واقع این قدرت رو به ما میدن که از طریق برنامه نویسی تابعی رو که صدا زده میشه عوض کنیم !


در کل بهتره یک کتاب بخونی هر کدومش کلی جزئیات داره این دو سه خط هم فکر نمیکنم مشکلی رو حل کنه!

programmable
دوشنبه 13 فروردین 1386, 18:26 عصر
Event رویدادیه که بر اثر یک واقعه مثل فشردن کلید ، کلیک موس ، صفر شدن یک متغییر ، بستن فرم و .... ایجاد میشه و ما رو قادر میکنه در اثر اون رویداد عمل مناسب رو انجام بدیم.

Event Handler روال یا تابعی است که در هنگام بروز رویداد فراخوانی میشه که به عنوان پارامتر شی ایجاد کننده و پارامترهای رویداد (کدام کلید کیبورد، کدام کلید موس، کدام ویژگی های شی و ... ) به اون ارسال میشه.

EventArg پارامتر هایی که در هنگام یک رویداد (Event) به روال مدیریت کننده آن رویداد ارسال می شوند(که بسته به نوع رویداد، منبع رویداد و شی مورد نظر فر می کنه)

مثلا رویداد کلیک شدن روی فرم:


private void Form1_Click(object sender, EventArgs e)
{
//کارهایی که در هنگام کلیک باید انجام بشه
}

Form1_Click نام تابع مدیریت کننده رویداد که میتونه به دلخواه عوض بشه!
sender ایجاد کننده رویداد
e پارامتر های رویداد مورد نظر

مثلا مشخص کردن این که تابع مدیریت کننده کلیک فرم اسمش چیه (امیدوارم this بدونید چیه):


this.Click += new System.EventHandler(this.Form1_Click);

Form1_Click نام تابع مدیریت کننده

Delegate در واقع برای فراخوانی توابعی هستند که ساختار آنها را نمی دانیم ولی نوع خروجی و نوع و تعداد پارامتر های ورودی آن را میدانیم ، در واقع برای فراخوانی توابعی که نمیشناسیم هستند ، برای توسعه برنامه و اضافه کردن قابلیت جدید به برنامه و... .
در واقع این قدرت رو به ما میدن که از طریق برنامه نویسی تابعی رو که صدا زده میشه عوض کنیم !


در کل بهتره یک کتاب بخونی هر کدومش کلی جزئیات داره این دو سه خط هم فکر نمیکنم مشکلی رو حل کنه!

آقا دستت درد نکنه ، عالی بود فقط یکی دوتا سوال:

1.میشه یکمی بیشتر در مورد EventArg توضیح بدید؟! این که اصلا در تابع مدیریت کننده ی رویداد چه نیازی به دسترسی به این پارامتر هست؟

2.EventHandler پس همون تابع مدیریت کننده هست دیگه؟

3. آیا معنی کد زیر اینه که "تابع form1_click رو به لیست مدیران رویداد کلیک کنترل جاری (this) اضافه کن"؟

this.Click += new System.EventHandler(this.Form1_Click);

راستی خبر نداری همین دو سه خط برای من به کلی مقاله ارزید!
ممنون

Alireza_Salehi
دوشنبه 13 فروردین 1386, 20:35 عصر
1. این پارامترها خیلی کاربرد دارند ، یه کم با کنترل ها و رویداد هاشون کار کنید بیشتر متوجه کاربردشون میشید. در هر کنترل و رویدادی این پارامترها تقریبا متفاوت هستند.

2.اگر منظورت مفهوم EventHandler باشه بله ، وگرنه Form1_Click مدیریت کننده رویداد هستش ، EventHandler میگه کدوم تابع کدوم رویداد رو مدیریت کنه.

3. این روش به طور کلی برای معرفی کردن تابع مدیریت کننده یک رویداد است. اما در این مثال خاص رویداد کلیک فرم مد نظر ماست نه کنترل جاری.

this به معنی کلاس جاری است نه کنترل جاری . در هر کلاسی که در حال کد نویسی باشیم استفاده از کلمه this به معنی اشاره به خود آن کلاس است. در این مثال چون در داخل کلاس فرم کد نوشته ایم پس به فرم اشاره میشود.

Capitan zapoa 2000
سه شنبه 04 اردیبهشت 1386, 09:00 صبح
man ye soal daram man yeseri object roi formam daram ezafam mishan vali chejor eventhandler 2rst conam masalan in
private void btn!_Click(sender,event)

Alireza_Salehi
سه شنبه 04 اردیبهشت 1386, 11:33 صبح
[نام رویداد].[نام شی] += new EventHandler( [نام تابع مدیریت کننده] );