سؤال

أحاول إنشاء تحكم مخصص وأحتاج إلى رفع حدث منه. الفكرة هي رفع حدث في نهاية حدث النقر (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;

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top