PDA

View Full Version : افزودن پارامتر سوم به event



djscsi
جمعه 11 شهریور 1390, 12:17 عصر
ایا میشه به مثلا رویداد onclick یه button پارامتر سومی ارسال کرد؟
مرسی

djscsi
جمعه 11 شهریور 1390, 20:44 عصر
یعنی راهی نداره؟

Xcalivorse
جمعه 11 شهریور 1390, 22:44 عصر
پارامتر اول هر Event از نوع Object هست. داده هایی که میخواهید بوسیله آرگومان سوم به تابع ارسال کنید رو میتونید توی یک کلاس جاسازی کنید که هم حامل Sneder Control باشه و هم شامل داده های مورد نظر.

Sajjad.Aghapour
شنبه 12 شهریور 1390, 01:23 صبح
شما برای چی می خواین این کار رو انجام بدید؟
روش زیاد هست اما اینکه بخواهید به یک Event یک پارامتری رو اضافه کنید، اگر به نحوه ساخت Event ها نگاهی بیاندازید متوجه میشید که این کار رو نمیشه کرد. اما این رو مشخص کنید که هدفتون از این کار چیه....
مثلا کاری که متونید بکنید کاری به شکل زیر هست:

public class ButtonClass : Button
{

public delegate void EventHandler1(object sender, EventArgs e, int i);
public event EventHandler1 Click;


protected override void OnClick(EventArgs e)
{
if (this.Click != null)
{
this.Click(this, e, 10);
}
}

}


که در این صورت میتونید این کنترل رو به فرمتون اضافه کنید و استفاده کنید:


private void buttonClass1_Click(object sender, EventArgs e, int i)
{
MessageBox.Show(i.ToString());
}

wolf_majid
شنبه 12 شهریور 1390, 10:35 صبح
سلام
ببخشید این سوال را اینجا می پرسم
if (this.Click != null)
کد بالا را متوجه نمی شم
یعنی چی اگر مخالف نال بود ؟ (یعنی اگر اتفاق افتاده بود صداش بزن ؟ )

Sajjad.Aghapour
شنبه 12 شهریور 1390, 11:58 صبح
در حقیقت این شرط چک میکنه که شما این Event رو فراخوانی کردید یا نه. تا وقتی شما با استفاده از عملگر =+ این رویداد رو فراخوانی نکنید(Subscribe) صف رویداد شما خالی خواهد بورد و EventHandler شما null خواهد بود. البته شما راه دیگری به جای چک کردن null بودن هم خواهید داشت که همان ابتدا مشخص کنید به صورت پیش فرض هیچ عملی انجام نشود. بدین صورت:


public event EventHandler1 Click = delegate { };

protected override void OnClick(EventArgs e)
{
this.Click(this, e, 10);
}