2015-01-04 328 views
2

我有一個桌面應用程序的組合框,我想給它一個按鍵的動作監聽KeyPress事件

這裏是我的代碼有

private void comboBox1_KeyDown(object sender, KeyEventArgs e) 
     { 
      if (e.KeyCode == Keys.Enter) 
      { 
       int selectedIndex = combobox.SelectedIndex; 
       if (selectedIndex >= 0) 
       { 
        switch (selectedIndex) 
        { 
         //....... 
        }; 
        this.Close(); 
       } 
      } 
     } 

現在我需要將其添加到組合框,我嘗試類似

this.combobox.KeyDown += new KeyEventArgs(this.comboBox1_KeyDown); 

但它不工作。

+0

「ContinueBehaviour」是你的組合框的名字嗎? – vvv 2015-01-04 11:10:17

+0

是的,這是combibox的名稱 – Ateeq 2015-01-04 11:10:48

回答

3

您需要爲事件添加處理程序,而不是某些參數。 (難道它甚至編譯?)

而不是

this.combobox.KeyDown += new KeyEventArgs(this.comboBox1_KeyDown); 

嘗試

this.combobox.KeyDown += new KeyEventHandler(this.comboBox1_KeyDown); 

KeyEventHandler在System.Windows.Forms命名空間中。

0
private void Form1_Load(object sender, EventArgs e) 
    { 
     comboBox1.KeyDown += comboBox1_KeyDown; 
    } 
0

除了編譯問題或不,我認爲你應該的SelectedIndexChanged 事件處理的SelectedIndex,因爲的KeyDown 如果SelectedIndex的前解僱改變。

comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged; 
0

與您的代碼的問題是connecting between The Event Handler Method and The Event

this.combobox.KeyDown += new KeyEventArgs(this.comboBox1_KeyDown); 

在上面的代碼行,您使用的KeyEventArgs作爲事件處理方法。但它不是一個事件處理程序方法。

相反,您應該使用KeyEventHandler,這是相應的事件處理程序方法來處理事件。

EventArgs的

EventArgs表示對於包含事件數據類的基類,並提供了用於不包括事件數據的事件的值。

包含事件數據的實例EventArgs由事件處理程序方法根據需要執行操作。

KeyEventHandler

KeyEventHandler是將要處理的控制的KeyUpKeyDown事件的方法。

同樣對於KeyPress事件,有KeyPressEventHandler方法。

所以,你應該改變你的代碼:

this.comboBox.KeyDown += 
        new System.Windows.Forms.KeyEventHandler(this.ComboBox_KeyDown);