PDA

View Full Version : سوال: چگونه می توانم Event مورد نظر خود را ایجاد کنم؟



saed2006
شنبه 21 فروردین 1389, 08:39 صبح
متد هایی به یک متغیر سراسری دسترسی دارند و مقدار این متغیر توسط متد های بزرگ و بزرگ تر میشود
حال میخوام ایونتی تعریف کنم که اگر طول متغییر مثلا به 1000 رسید فعال بشه

r00tkit
شنبه 21 فروردین 1389, 11:55 صبح
سلام شاید این لینک به نوشتن (http://ondotnet.com/pub/a/dotnet/2002/04/15/events.html) Custom Events در c# کمک کنه

Marzieh_A
شنبه 21 فروردین 1389, 12:00 عصر
چرا از if استفاده نمی کنید؟
هم می تونید داخل event مربوطه if بزارید هم وقتی که event رو call می کنید قبل از call کردن if بزارید.

saed2006
شنبه 21 فروردین 1389, 12:09 عصر
تشخیص اینکه طول متغیر رشته ای به عدد x رسیده مهم هست
روش بهتر؟

Netsky
شنبه 21 فروردین 1389, 12:39 عصر
سلام .

تشخیص اینکه طول متغیر رشته ای به عدد x رسیده مهم هست
با یه if میشه این کار رو کرد . خاصیت Lenght متغیر های رشته ای طولش رو بر میگردونه . مثل این :



if (Var_String.Lenght == 1000)
{
command
}

موفق باشید ..............

saed2006
شنبه 21 فروردین 1389, 13:18 عصر
این که با if میشه تشخیص داد رو منم میدونم
اگر از If استفاده بشه مجبورم در قسمت های مختلف برنامه این if رو بزارم که تعداد کپی ها زیاد میشه
با توجه به اینکه نمیشه پیش بینی کرد که کجای متد روی بزرگ کردن رشته تاثیرات زیاد داره

Marzieh_A
شنبه 21 فروردین 1389, 13:23 عصر
event که بارها نوشته نمی شه که کپی ها زیاد بشه!
if رو داخل خود event بزارید. :متفکر:

اَرژنگ
شنبه 21 فروردین 1389, 18:36 عصر
متد هایی به یک متغیر سراسری دسترسی دارند و مقدار این متغیر توسط متد های بزرگ و بزرگ تر میشود
حال میخوام ایونتی تعریف کنم که اگر طول متغییر مثلا به 1000 رسید فعال بشه
۱. به استفاده از متغییرهایه سراسری برنامه‌نویسی گفته نمیشه.
۲.به جایه کار با یک متغییر، یک کلاس تعریف کنید، و با استفاده از متدهایه پابلیک از هرجایه دیگر قبل از اینکه به متغییر پرایوت مقدار عوض بشه از داخل همان کلاس مدیریت کنید.
مشکلی بود کدتان را بفرستید درستش کنیم.

exlord
شنبه 21 فروردین 1389, 19:02 عصر
public class ValueChangedEventArgs : EventArgs
{
private int _value;
public int Value { get { return this._value;} }
public ValueChangedEventArgs(int value)
{
this._value = value;
}
}


public delegate void ValueChangedEvendHandler(object sender, ValueChangedEventArgs e);
public class myInt
{
private int _myGlobalint;
public int myGlobalint
{
get { return _myGlobalint;}
set
{
_myGlobalint = value;
onValueChanged(new ValueChangedEventArgs(value));
}
}

public event ValueChangedEvendHandler ValueChanged;
protected virtual void onValueChanged(ValueChangedEventArgs e)
{
ValueChanged(this, e);
}
}


myInt ii;
public Form1()
{
InitializeComponent();
ii = new myInt();
ii.ValueChanged += new ValueChangedEvendHandler(ii_ValueChanged);
}

void ii_ValueChanged(object sender, ValueChangedEventArgs e)
{
if(e.Value == 1000)
//Do SomeThing
}

saed2006
دوشنبه 23 فروردین 1389, 10:12 صبح
public class ValueChangedEventArgs : EventArgs
{
private int _value;
public int Value { get { return this._value;} }
public ValueChangedEventArgs(int value)
{
this._value = value;
}
}


public delegate void ValueChangedEvendHandler(object sender, ValueChangedEventArgs e);
public class myInt
{
private int _myGlobalint;
public int myGlobalint
{
get { return _myGlobalint;}
set
{
_myGlobalint = value;
onValueChanged(new ValueChangedEventArgs(value));
}
}

public event ValueChangedEvendHandler ValueChanged;
protected virtual void onValueChanged(ValueChangedEventArgs e)
{
ValueChanged(this, e);
}
}


myInt ii;
public Form1()
{
InitializeComponent();
ii = new myInt();
ii.ValueChanged += new ValueChangedEvendHandler(ii_ValueChanged);
}

void ii_ValueChanged(object sender, ValueChangedEventArgs e)
{
if(e.Value == 1000)
//Do SomeThing
}

میشه در مورد کارکرد کدها توضیح مختصری بدین

saed2006
یک شنبه 29 فروردین 1389, 10:45 صبح
:متفکر:
۱. به استفاده از متغییرهایه سراسری برنامه‌نویسی گفته نمیشه.
۲.به جایه کار با یک متغییر، یک کلاس تعریف کنید، و با استفاده از متدهایه پابلیک از هرجایه دیگر قبل از اینکه به متغییر پرایوت مقدار عوض بشه از داخل همان کلاس مدیریت کنید.
مشکلی بود کدتان را بفرستید درستش کنیم.

من از یک کلاس استفاده کردم و وقتی متغیر ست میشه چک میکنه که طولش بزرگتر n ]ست یا نه
اما فکر میکنم این چک کردن های زیاد , اصولی نباشه
وقتی event تعریف میکنیم به ازای هر تغییر در متغیر طولش چک میشه؟
اینطوری که تعداد چک کردن ها زیاد میشه:اشتباه:

اَرژنگ
یک شنبه 29 فروردین 1389, 11:35 صبح
:متفکر:

من از یک کلاس استفاده کردم و وقتی متغیر ست میشه چک میکنه که طولش بزرگتر n ]ست یا نه
اما فکر میکنم این چک کردن های زیاد , اصولی نباشه
وقتی event تعریف میکنیم به ازای هر تغییر در متغیر طولش چک میشه؟
اینطوری که تعداد چک کردن ها زیاد میشه:اشتباه:
تعداد چک کردنها با تعداد عوض شدن مقدار مساوی میماند،
دیگر مشکل چیه؟

saed2006
یک شنبه 29 فروردین 1389, 11:54 صبح
حتی وقتی از even استفاده کنیم؟

اَرژنگ
یک شنبه 29 فروردین 1389, 12:16 عصر
حتی وقتی از even استفاده کنیم؟
بالاخره باید مقایسه انجام بشه، بدونه مقایسه که نمیشه ایونت را بالا آورد.
یکجوری event را بالاخره باید بالا آورد. اگر چیزه متفاوتی در نظرتان است بگید.

saed2006
یک شنبه 29 فروردین 1389, 12:38 عصر
مثلا توی تشخیص وقوع وقفه در سیستم عامل دو روش وجود داره یکی چک کردن متوالی وقفه و تشخیص ان یکی هم ایجاد interup در روند اجرای برنامه و تشخیص وقوع وقفه
راه حل اول زمان گیر و بی فایده هست یعنی مرتبا چک میشه و راه دوم اصولی چون فقط یک بار اونم وقتی وقفه ایجاد شد اتفاق میافته حالا من نمیدونم event حالت اول هست یا دوم

اَرژنگ
یک شنبه 29 فروردین 1389, 12:58 عصر
مثلا توی تشخیص وقوع وقفه در سیستم عامل دو روش وجود داره یکی چک کردن متوالی وقفه و تشخیص ان یکی هم ایجاد interup در روند اجرای برنامه و تشخیص وقوع وقفه
راه حل اول زمان گیر و بی فایده هست یعنی مرتبا چک میشه و راه دوم اصولی چون فقط یک بار اونم وقتی وقفه ایجاد شد اتفاق میافته حالا من نمیدونم event حالت اول هست یا دوم
اگر بخواهیم به مشاهبتا نگاه کنیم . ایونت را مانند اینترراپت ببینید، ولی اینکه که این اینترراپت اجرا بشه بازهم به مقایسه شدن میانجامه، حالا دو روش میشه استفاده کرد :
یک ایونت که هر بار مقدار عوض میشه بالا بیاد (اینترراپت کنه) و یا اینکه
یک ایونت که هر بار مقدار عوض میشه و از ۱۰۰ به بالا بود بالا بیاد (اینترراپت کنه) .
استفاده از ایونتها و شیگرائی جایه بخصوصی دارد، اینطوری که من احساس میکن شرائطی که شما دارید استفاده از برنامه‌نویسی شیگرا را نقض میکنه، ممکنه که اصل چیزی که لازم دارید نباید به شکل شیگرائی پیاده بشه. شیگرائی را برایه حل همه حالتها همیشه نمیشه استفاده کرد.