PDA

View Full Version : سوال: آیا کسی برای خودش رویداد درست کرده که استفاده کنه؟



forodo
چهارشنبه 21 خرداد 1393, 13:19 عصر
سلام
کسی رویدادی درست کرده که از اون توی برنامه هاش استفاده کنه.
نه این که به عنوان تمرین توی برنامه هاش استفاده کرده باشه. یعنی واقعاً اون رویداد رو ایجاد کرده چون واقعاً به دردش می خورده.
با تشکر

plus
چهارشنبه 21 خرداد 1393, 13:31 عصر
رویدادها یک راه ساده پیاده سازی الگوی Observer هستن و این الگو هم در طراحی نرم افزار زیاد استفاده میشه.
http://en.wikipedia.org/wiki/Observer_pattern
برای مثال، در یک نرم افزار، من کلاسی به اسم Application دارم که مدیریت ورود و خروج کاربرها به نوعی توسط این کلاس انجام میشه.
این کلاس رویدادی به اسم CurrentUserChanged داره که وقتی که کاربر جاری نرم افزار عوض میشه این رویداد Raise میشه...بخش های مختلف نرم افزار، مثلا فرم اصلی به این رویداد Subscribe شدن و وقتی این رویداد فراخوانی میشه بهش عکس العمل نشون میدن.مثلا فرم اصلی، منوهاش رو بر اساس نوع کاربر، بروز میکنه...

forodo
چهارشنبه 21 خرداد 1393, 16:59 عصر
رویدادها یک راه ساده پیاده سازی الگوی Observer هستن و این الگو هم در طراحی نرم افزار زیاد استفاده میشه.
http://en.wikipedia.org/wiki/Observer_pattern
برای مثال، در یک نرم افزار، من کلاسی به اسم Application دارم که مدیریت ورود و خروج کاربرها به نوعی توسط این کلاس انجام میشه.
این کلاس رویدادی به اسم CurrentUserChanged داره که وقتی که کاربر جاری نرم افزار عوض میشه این رویداد Raise میشه...بخش های مختلف نرم افزار، مثلا فرم اصلی به این رویداد Subscribe شدن و وقتی این رویداد فراخوانی میشه بهش عکس العمل نشون میدن.مثلا فرم اصلی، منوهاش رو بر اساس نوع کاربر، بروز میکنه...
من نمی دونم دقیقاً شما چه کاری انجام میدید ولی می دونم توی اون رویدادی که خودتون نوشتید بالاخره شرطی قرار داید.
اینجوری می شد نوشت؟
یه کلاس تعریف کنیم و توش یه متغیر enum قرار بدیم.
public class Class2
{
public enum ChangeUser
{
admin,
modir,
karmand
}
}
موقعی که نام کاربری و رمز عبورش رو وارد کرد اینطوری بنویسیم:
private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1(Class2.ChangeUser.admin);
f.ShowDialog();

}
و موقعی که فرم می خواد باز بشه اینطوری تغییرات اعمال بشه.
public Form1(Class2.ChangeUser cu)
{
InitializeComponent();
changeForm(cu);
}

private void changeForm(Class2.ChangeUser cu)
{
switch (cu)
{
case Class2.ChangeUser.admin:
this.Text = "admin";
this.Width = 500;
this.Height = 500;
break;
case Class2.ChangeUser.modir:
this.Text = "modir";
this.Width = 111111111;
this.Height = 22222222;
break;
case Class2.ChangeUser.karmand:
this.Text = "karmand";
this.Width = 11000111;
this.Height = 202020;
break;
default:
break;
}
}

plus
پنج شنبه 22 خرداد 1393, 00:20 صبح
اگه شما چندین شی دیگه داشته باشین که قراره از تغییره User با خبر بشن، و در Form1 هم اطلاعی از اونها نداشته باشید، چطور میخواین با این روش اونها رو خبردار کنید؟ مسلما نمیتوید بدون پیاده سازی هیچ مکانیزمی متد مشخصی از اون اشیاء رو فراخوانی کنید.
در مسالی که من براتون زدم، کلاس Application اصلا خبر نداره که چه کلاس هایی نیاز دارن که از تغییر User آگاه بشن.در مثال شما شما کلا یک شی دارین و یک متد.بله این این مثال نیازی به رویداد نیست، مستقیما متد مورد نظر changeFom رو فراخوانی کردین.
شما باید الگوی Observer که لینکش رو گذاشتم رو متوجه بشین تا این موضوع رو درک کنید.

forodo
پنج شنبه 22 خرداد 1393, 09:42 صبح
اگه شما چندین شی دیگه داشته باشین که قراره از تغییره User با خبر بشن، و در Form1 هم اطلاعی از اونها نداشته باشید، چطور میخواین با این روش اونها رو خبردار کنید؟ مسلما نمیتوید بدون پیاده سازی هیچ مکانیزمی متد مشخصی از اون اشیاء رو فراخوانی کنید.
در مسالی که من براتون زدم، کلاس Application اصلا خبر نداره که چه کلاس هایی نیاز دارن که از تغییر User آگاه بشن.در مثال شما شما کلا یک شی دارین و یک متد.بله این این مثال نیازی به رویداد نیست، مستقیما متد مورد نظر changeFom رو فراخوانی کردین.
شما باید الگوی Observer که لینکش رو گذاشتم رو متوجه بشین تا این موضوع رو درک کنید.

من متوجه نشدم که روش شما به چه شکل است؟
لینک فارسی وجود نداره برای توضیح observer که چی هست؟

plus
پنج شنبه 22 خرداد 1393, 18:27 عصر
نه.توی همین فروم جستجو کنید فکر میکنم تاپیکی در مورد الگوهای طراحی بود...البته اگه بخواین خودتون رو به منابع فارسی محدود کنید کارتون در زمینه نرم افزار خیلی سخت میشه.