سؤال

أحاول إنشاء برنامج يحتوي على زر ، وفي كل مرة يتم فيها النقر فوق هذا الزر ، يقوم بنقل الزر ويضيف إلى النتيجة. ومع ذلك ، أحاول تعطيل مفتاح 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) ؛

يجب أن تعمل.

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