簡體   English   中英

C#中組合框上的KeyPress事件

[英]KeyPress event on combobox in C#

我在桌面應用程序中有一個組合框,我想給它一個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);

但它不起作用。

您需要為事件添加處理程序,而不是一些參數。 (它甚至可以編譯嗎?)

代替

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

嘗試

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

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

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

除了編譯問題與否,我認為您應該使用SelectedIndexChanged事件處理SelectedIndex,因為KeyDown如果在SelectedIndex更改之前被觸發。

comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;

您的代碼的問題在於事件處理程序方法事件之間連接

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

在上面的代碼行中,您將KeyEventArgs用作事件處理程序方法。 但這不是事件處理程序方法。

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

EventArgs的

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

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

KeyEventHandler

KeyEventHandler是用於處理Control的KeyUpKeyDown事件的方法。

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

因此,您應該將代碼更改為:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM