我正在使用网络表单
现在我的代码在我离开文本框并且文本已更改时运行。我遇到了问题。如果我更改文本但按下按钮而不是输入,则会通过代码重置。我需要能够更改文本并单击一个尚未执行任何操作的按钮,或者更改文本并按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
}
}
答案 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。
请参阅以下链接:
我会用评论但是......代表问题:/
编辑: 对于尚未意识到的任何人来说,问题变成了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上的值。