PDA

View Full Version : سوال: آموزش Delegate



Unknownlive
دوشنبه 22 تیر 1388, 23:14 عصر
با سلام اگر کسی می تواند اموزش قدم به قدم Delegate را بدهد با تشکر فراوان مخصوصا قسمت مربوط به رویداد ها (Event)

hozouri
سه شنبه 23 تیر 1388, 10:47 صبح
اول یه Delegate بساز


delegate void Click();


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


event Click click;


بعد هم هر کجا خاستی Event رو فراخونی کن
با دستور زیر هم یه شرط بزار که اگر از این Event استفاده نشده خطا نده


if(click != null)
{
click;
}

Xcalivorse
سه شنبه 23 تیر 1388, 11:13 صبح
Delegate در حقيقت براي فرستادن توابع به عنوان آرگومان به ديگر توابع و كلاسها طراحي شده و در خانواده زبان ‍C ،در ++C ماهيت آن شكل گرفت. تصور كنيد قصد ساخت كلاسي را داريد كه طراحي آن به گونه اي باشد كه در زمان Runtime خود كاربر تعيين كند كه چه تابعي در كلاس بايد اجرا شود.

vahid.bz
سه شنبه 23 تیر 1388, 11:40 صبح
لینک زیر مفصل با مثال توضیح داده
http://barnamenevis.org/forum/showthread.php?t=157287

Unknownlive
پنج شنبه 25 تیر 1388, 10:00 صبح
سلام اگه میشه کمی بیشتر توضیح دهید چه فایده ای دارد و اگه میشه یک مثال عملی بزنید.با تشکر

Unknownlive
پنج شنبه 25 تیر 1388, 11:51 صبح
با سلام،ببینید من می خواهم در فرم در هنگام اجرا یک شئ مثل Button را بسازم و اینکار را هم بلدم اما اینکه چه جوری رویداد به ان نسبت بدم نه فقط می دونم به Delegate ربط داره،خوده Delegate هم بلدم اما نحوه Event نوشتن را می خواهم بدونم حالا کسی بلده؟ با تشکر فراوان

hozouri
پنج شنبه 25 تیر 1388, 12:01 عصر
ببینید فقط کافی متد رویداد رو در هر جایی از کد هاتون که می خواهید فراخوانی کنید.
بر فرض شما یک متد به نام Loading دارید که یک سری دستورات رو هم انجام می ده متد رویداد رو هم می تونید توی همین متد فراخوانی نمایید.

توی کدوم رویداد Button می خوای Event تعریف کنی ؟؟؟

Unknownlive
پنج شنبه 25 تیر 1388, 12:06 عصر
ببینید من یک شئ از نوع زیر می سازم
Button btn=new Button()
بعد می خواهم در رویداد کلیک btn مثلا یک متد زیر را نسبت دهم
public void message()
}
messagebox.show()
{
حالا اگه میشه بگید من متد رویداد هم نمی دونم چه جوریه

hozouri
پنج شنبه 25 تیر 1388, 12:22 عصر
شما فقط کافیه که برای نسبت دادن یک متد به یک رویداد از دستور زیر استفاده نمایید.


this.buttonName.Click += new System.EventHandler(this.message);

Unknownlive
پنج شنبه 25 تیر 1388, 14:00 عصر
با تشکر از شما کاربر محترم من یه در خواست کوچولو دیگه دارم تا اطلاعاتم تکمیل بشه نحوه تعریف و استفاده یک Delegate Event , Delegate Event Handler البته با نوع کاربرد من هنوز به جواب این دو سوال اولی نرسیدم

hozouri
پنج شنبه 25 تیر 1388, 14:18 عصر
دوست عزیز این مباحث خیلی تکمیل و گستردس و برای بادگیری کلی این مطالب باید یه مقاله پیدا کنی و بخونی چون فکر نکنم هیچ کس نه وقت و نه حوصلش رو داشته باشه که بتونه این همه مطالب رو بگه.

Unknownlive
پنج شنبه 25 تیر 1388, 14:43 عصر
شما فقط کافیه که برای نسبت دادن یک متد به یک رویداد از دستور زیر استفاده نمایید.


this.buttonName.Click += new System.EventHandler(this.message);

با سلام این روش شما با خطا زیر مواجه می شود
Error 1 No overload for 'mess' matches delegate 'System.EventHandler'
حالا اگر به یک Delegate نسبت دهم بازهم خطای زیر را می دهد :
Error 1 No overload for 'mes' matches delegate 'System.EventHandler'

hozouri
پنج شنبه 25 تیر 1388, 14:59 عصر
دوست عزیز لازم نیست که شما برای این کار یه Delegate بسازی فقط یک متد بساز به صورت زیر :



private void message(object sender, EventArgs e)
{
//دستورات
}

vahid.bz
پنج شنبه 25 تیر 1388, 17:16 عصر
سلام
توی همون لینکی که تو اولین پستم توی این تایپک گذاشتم
توضیحاتی رو که خواستید همونجا با مثال و نمونه ی برنامه اضافه کردم

Unknownlive
پنج شنبه 25 تیر 1388, 19:31 عصر
با تشکر از همه اخر از بسگی سک زدم دیگه فهمیدم مرسی هرگی می خواهد یاد بگیرد بگه تا من راهنمایش کنم اما اخرش من نفهمیدم Delegate به عنوان پارامتر چه فایده ای داره