2010-08-27 58 views
2

我想構建一個有一個按鈕的程序,並且每次單擊該按鈕時,它都會移動按鈕並添加到樂譜中。但是,我試圖禁用Enter鍵,或者按下時禁止該命令。以下是我迄今爲止沒有爲'insert_method_here'重載匹配委託'System.EventHandler'

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(); 
    } 

這是我加什麼來防止輸入鍵從去。

if (k.KeyCode == Keys.Enter) { k.SuppressKeyPress = true; } 

但是它產生的錯誤......「爲‘的button1_Click’不超載匹配委託'System.EventHandler'「當單擊以顯示位置時,它將打開Form1.Designer的代碼並指向此行。 「this.button1.Click + = new System.EventHandler(this.button1_Click);」

任何幫助解決這個問題將不勝感激。

回答

7

您的方法簽名不匹配EventHandler委託(即,您不能只添加KeyEventArgs參數並使其工作)。您需要處理多個事件才能完成您想要的任務(請參閱KeyDownKeyPress事件)。

或者,使用MouseClick事件而不是Click事件。

+0

我試圖把兩者 私人無效Form1_KeyDown(對象發件人,發送KeyEventArgs E) 和 私人無效button1_KeyDown(對象發件人,發送KeyEventArgs E) 隨着程序和if語句沒有的事防止輸入鍵工作。 – Cistoran 2010-08-27 01:28:09

+0

@Cistorian嘗試'MouseClick'事件,那麼應該忽略設計的輸入鍵 – max 2010-08-27 01:29:58

+0

你是什麼意思試試MouseClick?用什麼來試試? – Cistoran 2010-08-27 01:33:30

1

那麼,我認爲這個問題是在你的button1_click()的decleration。

的事件處理程序只能有

delegate void EventHandler(Object sender, EventArgs e) 

所以它的簽名,以按鍵出來的button1_click,並把它放在一個KeyPress事件。

0

EventHandle委託,是兩個參數,不是三個。 和你的方法有三個參數,所以這是錯誤的。

看到:EventHandler delegate information in 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' 
} 

委託,方法必須有相同的參數,相同的返回類型,否則將是異常。

0

我有類似的問題。 EventHandler委託是一個模板。

public delegate void EventHandler(object sender,TEventArgs e);

所以,如果你改變線路:

this.button1.Click + =新System.EventHandler(這一點。的button1_Click);

到:

this.button1.Click + =新System.EventHandler(this.button1_Click);

它應該工作。

+14

這些行是相同的... – 2012-08-15 14:50:06

相關問題