لا يوجد حمولة زائدة لـ "insert_method_here" تطابق المندوب.
-
01-10-2019 - |
سؤال
أحاول إنشاء برنامج يحتوي على زر ، وفي كل مرة يتم فيها النقر فوق هذا الزر ، يقوم بنقل الزر ويضيف إلى النتيجة. ومع ذلك ، أحاول تعطيل مفتاح Enter ، أو قمع الأمر عند الضغط عليه. هذا ما لدي حتى الآن
private void button1_Click(object sender, EventArgs e, KeyEventArgs k)
{
if (k.KeyCode == Keys.Enter)
{
k.SuppressKeyPress = true;
}
score = score + 10;
timesClicked++;
int rand1 = RandomNumber(1, 400);
int rand2 = RandomNumber(1, 400);
button1.Location = new Point(rand1, rand2);
toolStripScore.Text = ("Your score is " + score);
toolStripClicks.Text = ("You've clicked the button{0} times " + timesClicked);
winCheck();
}
هذا ما أضفته لمنع مفتاح Enter من الدخول.
if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; }
ومع ذلك ، فإنه يولد الخطأ ... "لا يوجد حمولة زائدة لنظام" button1_click "يتطابق مع المندوب. "this.button1.click += new System.EventHandler (this.button1_click) ؛"
أي مساعدة في حل هذه القضية سيكون موضع تقدير كبير.
المحلول
توقيع الطريقة لا يتطابق EventHandler
مندوب (أي أنه لا يمكنك إضافة فقط KeyEventArgs
حجة والحصول على هذا العمل). ستحتاج إلى التعامل مع أكثر من حدث واحد للقيام بما تريد (انظر إلى KeyDown
أو KeyPress
الأحداث).
بدلا من ذلك ، الاستخدام MouseClick
الحدث بدلا من Click
حدث.
نصائح أخرى
حسنًا ، أعتقد أن القضية هي في تفكيك button1_click()
.
يمكن أن يكون معالج الأحداث فقط توقيع
delegate void EventHandler(Object sender, EventArgs e)
لذا ، خذ المفتاح الضغوط من button1_click
, ، ووضعه في أ KeyPress
حدث.
EventHandle Pegate ، هو معلمتان ، وليس ثلاثة. والطريقة الخاصة بك تحتوي على ثلاث معلمات ، لذلك من الخطأ.
نرى:EventHandler Informate Information في MSDN
أولاً ، عليك تعديل طريقتك:
private void button1_Click(object sender, EventArgs e)
{
}
ثم احكم على النوع في طريقة مثل هذه:
KeyEventArgs k = null;
if(e is KeyEventArgs){
k = (KeyEventArgs) e;
//do sth here about pressing 'enter'
}
المندوب ، يجب أن تحتوي الطريقة على نفس المعلمات ، ونوع الإرجاع نفسه ، أو سيكون استثناء.
واجهت مشكلة مماثلة. مندوب EventHandler هو قالب.
مندوب فريد من المفوضين العام (مرسل الكائن ، teventargs e) ؛
لذلك إذا قمت بتغيير الخط:
this.button1.click += new System.EventHandler (this.button1_click) ؛
إلى:
this.button1.click += new System.EventHandler (this.button1_click) ؛
يجب أن تعمل.