2013-09-25 114 views
1

是取消click事件時,用戶擊中按鈕輸入一個簡單的方法休息button_click事件

我試圖與(上按鈕,而不是鼠標點擊):

private void button3_Click(object sender, EventArgs e) 
    { 
     KeyEventArgs ke = e as KeyEventArgs; 
     if (ke != null) 
     { 
      if (ke.KeyCode == Keys.Enter) 
      { 
       return; 
      } 

     } 
    } 

但柯爲空

+0

不知道爲什麼你會想這樣做。這是Windows程序如何工作的標準功能,您應該努力遵守標準(除非在一些不尋常的情況下)。如果你不希望它成爲默認按鈕,那麼你可以從窗體的屬性中刪除它。 – awudoin

+0

我在我的winform中使用條碼掃描器。每次掃描後,我都設置了掃描器來回車。但如果按鈕的形式有焦點和用戶掃描條形碼,按鈕將做點擊事件(因爲條形碼掃描器掃描代碼和'點擊'輸入) – iskrzycki

+0

我認爲一個更好的方法是禁用該按鈕,直到通過輸入有效的輸入無論文本框。這將防止用掃描儀意外「點擊」,並且仍然保持用戶對WinForms期望的標準。我知道很多用戶喜歡用鼠標使用鍵盤(我經常這樣做),禁用輸入按鈕會讓他們煩惱。 – awudoin

回答

2
public void btnClick(object sender, EventArgs e) 
{ 
    bool IsMouse = (e is System.Windows.Forms.MouseEventArgs); 

    // If not mouse, they hit spacebar or enter 
} 
+0

謝謝。簡單和良好的解決方案:) – iskrzycki

+0

順便說一句,我記得我最初想出這個解決方案的方式。我在調試器中運行代碼,並在使用鼠標和鍵盤運行它時觸發按鈕並檢查它們是不同的對象類型,檢查了對象類型。如果你使用Enter/Space,你會得到類型EventArgs,所以你不能測試EventArgs,因爲MouseEventArgs從EventArgs下降 –

2

是的,它將爲空。因爲EventArgs不是KeyEventArgs

KeyEventArgs將作爲參數傳遞給KeyDownKeyUp事件。你搞砸了東西。

+0

此外,button3_Click是爲Button類訂閱Click事件的事件處理程序,因此這意味着按鈕被點擊,而不是按下 –

1

你可以做這樣的事情

private bool flag = false; 
private void button1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Return) 
    { 
     flag = true; 
    } 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (flag) 
    { 
     flag = false; 
     return; 
    } 
    //else do original task 
} 
+0

有點混亂,但是可以合理地工作:)謝謝,但@Gary Walker在我看來貼了更好的解決方案 – iskrzycki

0

你可以處理按鍵事件的按鈕,並禁用或忽略回車鍵出現,而不是在按鈕返回的點擊

0
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
     { 
      if ((keyData & Keys.KeyCode) == Keys.Enter) 
      { 
       SendKeys.Send("{Tab}"); 
       return true; 
      } 
      return false; 
     }