KeyFress事件不会在WinForm UserControl上触发

时间:2014-05-02 14:06:35

标签: c# winforms keypress enter

我的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键...除了以外所有其他键都被捕获回车键。我真的不知道发生了什么。是的...输入键在键盘上正常工作:)

3 个答案:

答案 0 :(得分:3)

该特定表单是否设置了AcceptButton?

(已在评论中回答)

这个问题可能与修复表格有关:Prevent WinForm AcceptButton handling Return key

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

可能发生的事情是:

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

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