C# 中组合框上的按键事件

本文关键字:事件 组合 | 更新日期: 2023-09-27 18:36:11

我在桌面应用程序中有一个组合框,我正在尝试给它一个按键操作侦听器

这是我的代码

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

但它不起作用。

C# 中组合框上的按键事件

您需要向事件添加处理程序,而不是某些参数。(它甚至编译吗?

而不是

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事件,因为键向下如果在更改选定索引之前触发。

comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;

代码的问题在于事件处理程序方法事件之间的连接

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

在上面的代码行中,您将KeyEventArgs用作事件处理程序方法。但它不是事件处理程序方法。

相反,您应该使用 KeyEventHandler ,这是处理事件的相应事件处理程序方法。

事件参数

EventArgs 表示包含事件数据的类的基类,并提供用于不包含事件数据的事件的值。

事件

处理程序方法使用包含事件数据的 EventArgs 实例根据需要执行操作。

键事件处理程序

KeyEventHandler是将处理控件的KeyUpKeyDown事件的方法。

同样,对于KeyPress事件,也有KeyPressEventHandler方法。

所以你应该把你的代码改成:

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