با سلام.
آیا میشود برای یک کلاسی که خودمان نوشته ایم event ساخت؟ لطفا یک مثال ساده بزنید .
با سلام.
آیا میشود برای یک کلاسی که خودمان نوشته ایم event ساخت؟ لطفا یک مثال ساده بزنید .
سادست ،
ابتدا باید یک 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
من یک کلاس از نوع 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.
با تشکر . FARHAD.B.S
می تونید همین مثال رو کمی کامل کنید.مثلا یک کلاس بسازید که event داره و تو کلاس دیگه ای یه وهله ازش بسازید و از event اون به عنوان تابع استفاده بکنید؟
عزیز شما چرا سوالاتت رو تو تاپیک مردم میزاری؟خوب خود تاپیک بزن دوست من.
اگه منظورت سوال من هست که مربوط هست به این تاپیک!!عزیز شما چرا سوالاتت رو تو تاپیک مردم میزاری؟خوب خود تاپیک بزن دوست من.
سید جان . قربون اون جدت . بجای دعوا جواب سوالو بده میدونم که خیلی حرفه ای هستی.
کد مشکلی نداره ، فقط در رویداد مورد نظر در تسکت باکس ها چک کن ببین sender یا e تهی هستند یا خیر.اما موقع اجرا خطای زیر میده:
اگه بازم حل نشد میتونی یه سمپل کوچیک بنویسی و اینجا ضمیمه کنی تا علت خطا مشخص شه.
فهمیدم مشکل چیه.
وقتی همچین event درست میکنیم چون هنوز تابعی براش درست نشده این خطا رو میگیره
ولی وقتی تو فرم اصلی از این event استفاده میکنیم دیگه خطا نمیگیره چون تابع رو داره.
حالا چجوری داخل این کنترلی که داریم براش یک تابع درست کنیم که همچین اتفاقی نیفته؟
من دستور زیر رو برای textchanged ها گذاشتم و یک تابع درست کردم و مشکل برطرف شد.
MyEvent += new MyEvenetDelegate(MyControl_MyEvent);
ولی یک مشکل هست و اون اینکه تو فرم اصلی وقتی از این event استفاده میشه. نام event ببه همین شکل به همراه شماره 1 هست:
private void myControl1_MyEvent1(object sender, EventArgs e)
{
}