رويداد ها و آرگيومنت هاي خاص - Event and Custom EventArgs

بسیاري از رويداد ها در هنگام وقوع داراي جزئياتي مي باشند. به عنوان مثال رويداد MouseMouse داراي اطلاعات همچون محل Cursor موس مي باشد يا در رويداد KeyDown کليدي که تايپ شده است از اطلاعات خاص اين رويداد است. ايجاد رويداد ها و پاس کردن اطلاعات خاص آن رويداد ها توسط کلاس هايي که از کلاس پايه اي به نام EventArgs به ارث رفته اند ، اعلام مي گردد.

براي بررسي اين موضوع از يک مثال استفاده مي کنيم. فرض کنيد که در مثال قبلي مي خواهيد که در موقع بروز رويداد LowAmount امکان جلوگيري از خريدي در حال وقوع را داشته باشيم. پس شما بايد يک متغيير boolean در پارامتر هاي رويدادتان به نام Cancel تعريف کنيد که در صورتي که توسط متد EventHandler به True ست شده باشد بايد از خريد جلوگيري نمائيد.

براي اجراء اين موضوع يک کلاس به نام LowAmountEventArgs تعريف مي کنيم (اين کلاس از کلاس EventArgs به ارث مي رود) و در آن يک متغيير به نام Cancel از جنس bool تعريف مي کنم:



سپس delegate مربوط به رويداد را به صورت زير تغيير مي دهم:



همچنين در زمان رويداد يک شيء از جنس LowAmountEventArgs ايجاد مي کنم:



حالا در زمان رويداد اين امکان وجود دارد که کاربر از ثبت اين برداشت از انبار جلوگيري کند. براي اين کار کافيست که کاربر شما در event handler مربوط به استفاده از متغيير موجود مقدار Cancel را به True ست کند.



نمونه هاي بسياري از اين نوع رفتار ها در دات نت وجود دارد ، به عنوان مثال در کلاس Form در Windows Application وقتي درخواست بسته شدن فرم از طرف کاربر ارسال مي شود ، يک رويداد به نام FormClosing رخ مي دهد ، در صورتيکه شما يک EventHandler براي اين رويداد بنويسيد مي توانيد با ست کردن متغيير Cancel در کلاس FormClosingEventArgs مي توانيد مانع از بسته شدن فرم شويد.

دانلود مثال اين پست