2014-02-18 121 views
1

下面是我的整個代碼,沒有其他可能會干擾代碼的形式,類等。我剛剛寫了這個測試。請注意,我知道我有爲什麼KeyDown事件不起作用?

this.KeyPreview = true; 

兩次,這是因爲我在查找示例代碼時在兩個地方看到它。代碼編譯沒有錯誤。我也試過這個代碼使用textBox,具有相同的非工作結果。

e.KeyCode == Keys.Enter是不起作用的代碼。我還嘗試了其他鍵,如W和A.有人知道我還需要做什麼嗎?使用VS2010。

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WindowsFormsApplication5 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.KeyPreview = true; 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.KeyPreview = true; 
    } 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      MessageBox.Show("True"); 
     } 
    } 
} 
} 
+0

可以毫不的KeyPreview工作也如果一切是正確的! –

+0

您是否在Form1_KeyDown方法中放置了一個調試器,以查看代碼是否正在執行? –

+1

KeyPreview是一個VB6屬性,它的行爲就像它在VB6時代所做的一樣。這是怪異的,它不會觸發導航鍵的事件。像Enter一樣。只是不要使用它並選擇適當的.NET方式,重寫表單的ProcessCmdKey()方法。 –

回答

0

IsInputKey屬性設置爲true。

Control.KeyDown Event

+1

這段代碼是什麼工作,謝謝! protected override bool IsInputKey(Keys keyData) if(keyData == Keys.Enter) { MessageBox.Show(「True」); 返回true; } else { return base.IsInputKey(keyData); } } – user1114503

0

你從來沒有認購的KeyDown事件。檢查以下LINQPad片段:

public void Main() 
{ 
    Application.Run(new MyForm()); 
} 

public class MyForm : Form 
{ 
    public MyForm() 
    { 
     this.KeyDown += this.OnKeyDown; 
    } 

    public void OnKeyDown(object sender, KeyEventArgs e) 
    { 
     e.Dump(); 
    } 
} 
0

你可以重寫如下ProcessCmdKey方法:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Enter) 
     { 
      //write your code here 
      MessageBox.Show("Enter"); 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    }