PDA

View Full Version : event و مشکل فراخوانی رویدادی که خودش رویداد یه کلاس دیگه رو می خونه



unrealword
سه شنبه 25 خرداد 1395, 13:41 عصر
من داخل فرمم یه کلاس رو فراخوانی کردم که داخلش event داره الان می تونم event کلاس که فراخوانی کردم رو بخونم ولی داخل کلاسی که دارم باز یه کلاسی دارم که خودش به من event می ده
قصد من اینه مقدار event کلاسی که داخل کلاسم هست به فرمم بیارم

به طور مثال
داخل کلاسم از WebClient استفاده کردم الان قصد دارم به مقدار event های WebClient که در کلاسم استفاده کردم در فرمم دسترسی داشته باشم
لطفا راهنمایی کنید

ronix3
سه شنبه 25 خرداد 1395, 14:38 عصر
تو کلاست یه رویداد شبیه اون رویداد بنویس و رویداد اون کلاس رو به کلاست اضافه کن و تو رویداد اون کلاس رویدادی که واسه کلاس خودت ساخته بودی رو اجرا کن

unrealword
سه شنبه 25 خرداد 1395, 16:40 عصر
کار شما رو انجام دادم ولی متاسفانه جواب نگرفتم
امکانش هست یه نمونه کد دی که جواب بده از رو اون مشکل رو بفهمم

ronix3
سه شنبه 25 خرداد 1395, 17:37 عصر
class c1
{
public delegate void d1(object e);
public event d1 event1;
public void start()
{
c2 class2 = new c2();
class2.event2 += new c2.d2(start_event1);
class2.start();
}
private void start_event1(object e)
{
if (event1 != null)
{
event1(e);
}
}
}

class c2
{
public delegate void d2(object e);
public event d2 event2;
public void start()
{
if (event2 != null)
{
object n = null;
event2(n);
}
}
}
حالا اگه کد زیر رو تو رویداد کلیک یک باتن بنویسید و رویداد رو هم به فرم اضافه کنید رویداد رو فرم اتفاق می افته

c1 class1 = new c1();
class1.event1 += new c1.d1(start_event);
class1.start();

رویدادی که باید تو فرم بنویسید
private void start_event(object e)
{
MessageBox.Show("Event Hapend");
}
موفق باشید

unrealword
چهارشنبه 26 خرداد 1395, 09:06 صبح
متاسفانه نتونستم جواب بگیرم و مثال شما خیلی گنگ بود
دوستان کسی هست کمک کنه

ronix3
پنج شنبه 27 خرداد 1395, 00:47 صبح
کد ها رو اصلاح و تست کردم مشکلی نداره
کلاس c1 رو کلاس خودتون در نظر بگیرید که می خواستید توش از یه کلاس دیگه استفاده کنید و به جای c2 از هر کلاسی که می خواستید استفاده کنید استفاده کنید
حالا کلاس c1 رو واستون توضیح می دم
خب شما از کلاس می خواید که کاری براتون انجام بده پس باید یه جوری بهش دستور انجام کار رو بدید این کار با متد start انجام می شه که باید تو فرم کلاس c1 رو تعریف کنید و این متد رو فراخوانی کنید که بالا گفتم چطور انجام می شه و دستورات لازم رو تو این متد به کلاس دوم می دید و در آخر رویدادی که می خواید رو اضافه می کنید به کلاس و تو اون رویداد کد های فرا خوانی کلاس c1 رو قرار می دید

فرض کنید شما قصد خریدن جنسی دارید و به یک فروشگاه (که همون کلاس c1 ما هست) این جنسو سفارش می دید (با متد start که تو کلاس هست این کار انجام می شه) حالا این فروشگاه این جنسو از یه جای دیگه تهیه می کنه( که همون کلاس c2 ما هست و باز با متد start که تو کلاس c2 هست اون فروشگاه هم جنسو سفارش می ده) حالا از طریق رویدادی که تو c2 هست(event2) فروشگاه جنسو تحویل می گیره (این رویداد تو کلاس c1 برای دریافت تعریف می شه) و وقتی فروشگاه جنسو تحویل گرفت از طریق event1 که تو کلاس c1 هست تحویل شما می ذه

class c1
{
public event UploadDataCompletedEventHandler event1;
public void start()
{
WebClient w = new WebClient();
byte[] b=null;
w.UploadData("address", b);
w.UploadDataCompleted+=new UploadDataCompletedEventHandler(ucevent)

}
private void ucevent(object sender,UploadDataCompletedEventArgs e)
{
if (event1 != null)
{
event1(sender,e);
}
}
}
تو این کلاس به جای کلاس c2 از همون کلاسی که شما گفتید استفاده کردم و تو متد استارت دستور آپلود دادم و رویداد تمام شدن آپلود رو به کلاسم اضافه کردم حالا وقتی دستور استارت رو بدم کلاس آپلود فایل رو شروع می کنه و وقتی آپلود تموم شد رویداد کلاس c1 هم اتفاق می افته

اینم کد های فرم
private void button1_Click(object sender, EventArgs e)
{
c1 class1 = new c1();
class1.event1 += new UploadDataCompletedEventHandler(start_event);
class1.start();
}

private void start_event(object sender, UploadDataCompletedEventArgs e)
{
MessageBox.Show("Event Hapend");
}

ronix3
پنج شنبه 27 خرداد 1395, 00:57 صبح
البته اینجا انتظار نداشته باشید که کد بالا رو اجرا کنید چون تو دستور آپلود نه فایل بهش دادم نه آدرس فقط یک مثال بود