如何在c#文本框中输入时运行代码

时间:2016-10-24 07:47:50

标签: c# asp.net webforms

我正在使用网络表单

现在我的代码在我离开文本框并且文本已更改时运行。我遇到了问题。如果我更改文本但按下按钮而不是输入,则会通过代码重置。我需要能够更改文本并单击一个尚未执行任何操作的按钮,或者更改文本并按Enter键以触发代码。

感谢您的帮助

这是文本框的文本更改事件,带有我需要做的注释。我认为我需要的是一个点击输入的事件,而不是改变文字

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
            }       
        }

3 个答案:

答案 0 :(得分:1)

您需要为文本框的KeyDown事件实现一种方法。

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

答案 1 :(得分:0)

如果这是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
}
}

答案 2 :(得分:0)

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

请参阅以下链接:

Textbox Keydown Event

我会用评论但是......代表问题:/

编辑: 对于尚未意识到的任何人来说,问题变成了webforms而不是winforms

替代:

使用按钮。

您可以在文本字段旁边放置一个按钮,它很简单,并且不会进行大量工作。您可以将文本框的TabIndex设置为1,将按钮的TabIndex设置为2,这样当您点击TAB时,它将聚焦文本框,如果再次按下它将聚焦按钮。您还可以考虑将按钮添加到文本框中以进行设计。

编辑:您还需要考虑回发,当您点击按钮时,页面返回意义值丢失,将数据保留在字段中您必须使用视图状态,会话变量或隐藏的领域。为简单起见,我将文本框的值设置为隐藏字段,然后只需在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
    }
}

然后重置page_load上的值。