أحداث التحكم المخصصة في C#
-
02-10-2019 - |
سؤال
أحاول إنشاء تحكم مخصص وأحتاج إلى رفع حدث منه. الفكرة هي رفع حدث في نهاية حدث النقر (OnafterClick). لقد وجدت واحدة أو اثنين من البرامج التعليمية على القيام بذلك ، لكنني من الواضح أنني أفتقد خطوة في مكان ما ؛ لدي ما يلي.
في السيطرة:
public class AfterClickEventArgs : EventArgs
{
...
}
public partial class MyButton : CommandButton
{
public delegate void AfterClickEvnt(object sender, AfterClickEventArgs e);
public event AfterClickUpdatedEvnt AfterClick;
}
protected override void OnClick(EventArgs e)
{
...
Processing here
...
AfterClickEventArgs myArgs = new AfterClickEventArgs();
AfterClick(this, myArgs);
}
في البرنامج باستخدام عنصر التحكم:
في initializeComponent ():
this.MyButton.AfterClick += new System.EventHandler(this.cmdMyButton_Click);
يعطيني هذا الخط خطأ ترجمة (cmdmybutton_click موجود). يخبرني: لا يمكن تحويل نوع "system.eventHandler" ضمنيًا
هل يمكن لأي شخص أن يخبرني بما أفتقده ، أو سوء فهم حول هذا ، من فضلك؟
المحلول
يُعلن أن هذا الحدث الخاص بك من النوع AfterClickEvnt
, ، لكنك تحاول الاشتراك فيها باستخدام EventHandler
. لا يمكنك التحويل بين الاثنين.
خيارات:
حدد صراحة النوع الصحيح:
this.MyButton.AfterClick += new AfterClickEvnt(this.cmdMyButton_Click);
استخدم تحويل مجموعة الطريقة الضمنية:
this.MyButton.AfterClick += cmdMyButton_Click;
بالمناسبة ، أقترح عليك إزالة نوع المندوب المخصص الخاص بك وبدلاً من ذلك استخدام عام EventHandler<T>
مندوب:
public event EventHandler<AfterClickEventArgs> AfterClick;
نصائح أخرى
هناك بعض التناقضات في الكود الخاص بك ، لذلك من الصعب أن نقول ما يجري. (أصبح Myargs Newargs ، وأصبحت بعد cinckupdateevnt بعد cclickevnt). أنت تحاول أيضًا استخدام eventHandler بدلاً من مندوبتك.
أيضا ، من الأفضل الاستخدام EventHandler<T>
حتى لا تضطر إلى الإزعاج بمندوب:
public event EventHandler<AfterClickEventArgs> AfterClick;