PDA

View Full Version : ایجاد event برای Class ها



mirzaei_2000
سه شنبه 23 خرداد 1385, 21:19 عصر
با سلام.
آیا میشود برای یک کلاسی که خودمان نوشته ایم event ساخت؟ لطفا یک مثال ساده بزنید .

Farhad.B.S
چهارشنبه 24 خرداد 1385, 09:05 صبح
سادست ،
ابتدا باید یک Delegate بسازید که شکل و فرمت event و پارامترهاش رو نشون بده
مثلا :


public delegate void MyEventDelegate(string Param1, string Param2);

و بعد خود event رو به این شکل معرفی میکنی :


public event MyEventDelegate MyEvent;


در نهایت هر جا که بخوای این event رو fire کنی به شکل زیر عمل میکنی :


public void FireMyEvent()
{
MyEvent("P1", "P2");
}


این مثال به طور جامع تری توضیح داده :
http://www.csharphelp.com/archives2/archive470.html

once4ever
چهارشنبه 24 خرداد 1385, 15:11 عصر
من یک کلاس از نوع panel دارم که چندتا textbox داره.
میخوام یک event براش درست کنم که هرکدوم تکست باکسها تغییر کرد این event اجرا بشه.
اینارو اول کلاس تعریف کردم

public delegate void MyEventDelegate(object sender, EventArgs e);
public event MyEventDelegate MyEvent;


اینم تو رویدادهای تغییر تکست باکسها گذاشتم:

MyEvent(sender, e);


اما موقع اجرا خطای زیر میده:

Object reference not set to an instance of an object.

mirzaei_2000
چهارشنبه 24 خرداد 1385, 21:35 عصر
با تشکر . FARHAD.B.S
می تونید همین مثال رو کمی کامل کنید.مثلا یک کلاس بسازید که event داره و تو کلاس دیگه ای یه وهله ازش بسازید و از event اون به عنوان تابع استفاده بکنید؟

محمد میرمصطفی
جمعه 26 خرداد 1385, 00:05 صبح
عزیز شما چرا سوالاتت رو تو تاپیک مردم میزاری؟خوب خود تاپیک بزن دوست من.

once4ever
جمعه 26 خرداد 1385, 00:42 صبح
عزیز شما چرا سوالاتت رو تو تاپیک مردم میزاری؟خوب خود تاپیک بزن دوست من. اگه منظورت سوال من هست که مربوط هست به این تاپیک!!

mirzaei_2000
جمعه 26 خرداد 1385, 11:04 صبح
سید جان . قربون اون جدت . بجای دعوا جواب سوالو بده میدونم که خیلی حرفه ای هستی.

Farhad.B.S
جمعه 26 خرداد 1385, 11:20 صبح
اما موقع اجرا خطای زیر میده:

کد مشکلی نداره ، فقط در رویداد مورد نظر در تسکت باکس ها چک کن ببین sender یا e تهی هستند یا خیر.

اگه بازم حل نشد میتونی یه سمپل کوچیک بنویسی و اینجا ضمیمه کنی تا علت خطا مشخص شه.

once4ever
جمعه 26 خرداد 1385, 15:05 عصر
فهمیدم مشکل چیه.
وقتی همچین event درست میکنیم چون هنوز تابعی براش درست نشده این خطا رو میگیره
ولی وقتی تو فرم اصلی از این event استفاده میکنیم دیگه خطا نمیگیره چون تابع رو داره.
حالا چجوری داخل این کنترلی که داریم براش یک تابع درست کنیم که همچین اتفاقی نیفته؟
من دستور زیر رو برای textchanged ها گذاشتم و یک تابع درست کردم و مشکل برطرف شد.

MyEvent += new MyEvenetDelegate(MyControl_MyEvent);

ولی یک مشکل هست و اون اینکه تو فرم اصلی وقتی از این event استفاده میشه. نام event ببه همین شکل به همراه شماره 1 هست:

private void myControl1_MyEvent1(object sender, EventArgs e)
{

}