如何在c#文本框中按enter键运行代码

本文关键字:enter 运行 代码 文本 | 更新日期: 2023-09-27 18:14:29

我正在使用web表单

现在我的代码运行时,我离开文本框,文本已更改。我遇到问题了。如果我改变了文本,但没有按回车键,它就会通过代码重置。我需要能够改变文本,并单击一个按钮,但不会做任何事情,或改变文本,并按回车,这将触发代码。

thanks for the help

这是文本框的文本更改事件,其中包含我需要执行的操作的注释。我真正需要的是一个事件来点击进入,而不是改变文本

protected void txtboxPlate_TextChanged(object sender, EventArgs e)
        {
            if (txtboxPlate.Text == "plate number")
            {
                //will check database for "plate number" and do stuff on enter.
            }
            else
            {
                    resetforms();// on enter
            }
        else
        {
            the text has changed by user, but has clicked a button and needs nothing to happen because of this text change
            }       
        }

如何在c#文本框中按enter键运行代码

你需要为你的文本框的KeyDown事件实现一个方法

private void txtboxPlate_KeyDown(object sender, KeyEventArgs e)
{
     if (e.KeyCode == Keys.Enter) {
          //Code
     }
}

Keydown是一个客户端事件,据我所知,你很可能不得不使用JavaScript/Jquery。

参考以下链接:

文本框Keydown事件

我本想用注释,但是…Rep issues:/

编辑:对于那些还没有意识到的人来说,问题已经变成了webforms而不是winforms

替代:

使用按钮

你可以在文本框旁边放一个按钮,这很简单,不需要做很多工作。你可以设置文本框的TabIndex为1,按钮的TabIndex为2,所以当你按TAB键时,它会聚焦文本框,如果再按一次,它会聚焦按钮。您还可以考虑将按钮添加到文本框中以达到设计目的。

编辑:你还需要考虑post back,当你点击一个按钮页面get的post back意味着值丢失,要坚持字段内的数据,你必须使用视图状态,会话变量或隐藏字段。为了简单起见,我将文本框的值设置为一个隐藏字段,然后简单地在page_load上重新应用该值。如果该值需要在多个回发/从其他页面访问时持久化,请使用会话变量。

作为代码示例:

完全删除Text_changed事件。

protected void btnDoStuff(object sender, EventArgs e)
{
    if(txtPlateNumber.Text == "Plate Number")
    {
        //Do stuff
    }
    else
    {
        //Do other stuff
    }
}

如果您注意到值在返回后消失,请执行以下操作:

protected void btnDoStuff(object sender, EventArgs e)
{
    if(txtPlateNumber.Text == "Plate Number")
    {
        //Do stuff
        myHiddenField.Value == txtPlateNumber.Text;
    }
    else
    {
        //Do other stuff
    }
}

如果这是winform,你仍然想使用textchanged,你可以尝试先捕获你的代码,例如:

protected void txtboxPlate_TextChanged(object sender, EventArgs e)
    {
        //Catching code
        if (txtboxPlate.Text != "")         
        {
            if (txtboxPlate.Text == "plate number")
            {
                //will check database for "plate number" and do stuff on enter.
            }
            else
            {
                resetforms();// on enter
            }
        }
    else
    {
        the text has changed by user, but has clicked a button and needs nothing to happen because of this text change
    }

因为textchanged做的是除非txtboxPlate。Text等于"车牌号码",它将始终执行else语句。如果我错了,请纠正我,但是我以前也有过同样的问题,几乎让我发疯。

或尝试以上1个upvote代码:

protected void txtboxPlate_TextChanged(object sender, EventArgs e)
{
    //Event only happens if you press enter
    if (e.KeyCode == Keys.Enter) 
    {
        if (txtboxPlate.Text == "plate number")
        {
            //will check database for "plate number" and do stuff on enter.
        }
        else
        {
            resetforms();// on enter
        }
    }            

else
{
    the text has changed by user, but has clicked a button and needs nothing to happen because of this text change
}
}