KeyPress事件在WinForm UserControl上没有触发

本文关键字:UserControl 事件 WinForm KeyPress | 更新日期: 2023-09-27 18:01:34

我有一个用户控制在我的winforms应用程序与以下代码在KeyPress事件:

private void txtCodigo_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((this.txtCodigo.Text.Length == 0) && (e.KeyChar == ''r'))
    {
        this.Limpiar();
        if (LimpiarEvento != null)
            LimpiarEvento(this, new EventArgs());
        if (NextControl != null)
            NextControl(this, new EventArgs());
    }
    if ((this.txtCodigo.Text.Length > 0) && (e.KeyChar == ''r'))
        this.txtCodigo_Leave(sender, e);
    if (NUMEROS.IndexOf(e.KeyChar) < 0)
    {
        e.Handled = true;
    }
}

现在,我的问题是,这个UserControl是在我的应用程序中的许多形式和完美的工作,当我按下输入键在txtCodigo文本框,但在一个形式的输入键没有被触发。即使我设置了一个断点,它也不会触发。为什么会发生这种情况?

编辑:我只是尝试将KeyPress事件添加到表单本身,并将KeyPreview设置为true,而Enter键未被捕获…除Enter键外,所有其他键都被捕获。我真的不知道发生了什么事。是的……键盘上的回车键可以正常工作:)

KeyPress事件在WinForm UserControl上没有触发

这个特定的表单有它的AcceptButton设置吗?

(已在评论中回答)

这个SO问题可能与修复表单相关:防止WinForm AcceptButton处理返回键

可能是这样的:

如果您从以前的程序中复制粘贴了代码,则未设置事件处理程序。

首先从VS的设计器添加事件处理程序,并在添加的处理程序中粘贴您的代码。

您确定在设计器/代码中添加了事件处理程序吗?可以这样做。它应该被添加到控件所属的构造函数中。

this.txtCodigo.KeyPress += new KeyPressHandler(txtCodigo_KeyPress);
编辑:

您正在使用这行代码将事件设置为取消。

e.Handled = true;

来源:http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.handled (v = vs.110) . aspx