在关注下一个文本框之前,尝试在文本框中输入1或2位数字需要帮助



嗨,我正试图在asp.net c#的文本框中输入1或2位数字。我想把注意力集中在下一个文本框中。这是我的代码,但它抛出了一个错误,即textbox1是从创建它的另一个线程访问的。

private void textBox19_TextChanged(对象发送方,EventArgs e({

线程t=新线程(((=>{线睡眠(2000(;textBox1.Focus((`});t.开始((;}

好的,首先,您需要掌握并理解往返的概念。

接下来,在用户完成在文本框中的键入并点击TAB键之前,文本更改事件不会触发。因此,您无法真正使用代码进行按键处理。

当你点击标签时,就会出现回邮。这是往返行程的重要开始。如果你不能绝对肯定地掌握这个结论,那么你对asp.net页面的所有舒适感都将丢失,你将永远100%丢失。你必须,绝对必须掌握这个结论。

所以我们的往返行程:

点击一个按钮,或者触发一个事件进行htat控制(按键处理将不起作用——这是当用户点击选项卡时(。

所以,点击该控件上的按钮或选项卡。

Post back occures
The WHOLE web page travels up to the server.
When we say whole page, we mean ALL of the browser HTML, all of the whole page
This includes all controls, all graphics, all HTML - the whole deal
Now the page is at the server.
The asp.net processes the market.
THEN your code behind runs. At this point your event code runs
In your event code, you can say modify a value of a control.
Now:
Then the WHOLE PAGE travels back to the browser and is refresed and displald.
The page is now sitting back on the client side browser.
So as the user types. Clicks into a text box etc.? The browser is allowing this.
The server is not being talked to (unless you trigger another post-back (round trip).

那么,当用户在文本框中键入时?当用户正在编辑该文本框时?这是所有出现的浏览器端。你没有和服务器交谈,这些往返也没有发生。

因此,你不能说在文本框上放一些计时器,然后查看/检查/查看/希望代码看到的内容发生变化。在页面回发和往返行程开始之前,这些代码都不会运行。

往返行程费用高昂,通常不适合进行按键处理。如果你要为每个按键设置一个完整的页面张贴,那么每个按键就像一个提交按钮一样——整个页面必须返回到服务器。

那么,既然你掌握了以上内容?好吧,那么你就不能在服务器上循环/池/测试带有代码的文本框的值。你只能在整个网页发送到服务器后才能看到/使用/检查/修改/玩表单上的控件。因此,单按键处理是不可行的。

好的,那么我们在这里能做什么呢?

最简单的是使用客户端代码。只需检查文本框的长度,如果是2个字符,则将焦点设置为另一个控件。

因此,让我们在表单上放置一个文本框,我们可以使用这个标记来实现这一点:

<asp:TextBox ID="TextBox3" runat="server"
onkeyup="mykeycheck()" >
</asp:TextBox>
<script>
function mykeycheck() {
vTextBox = document.getElementById('<%= TextBox3.ClientID %>');
if (vTextBox.value.length == 2) {
document.getElementById('<%= TextBox1.ClientID %>').focus();
}
}
</script>

因此,现在,我们的重点将转移到Textbox1,并且我们没有任何服务器端代码。

我们能";一些如何";进行一键检查并运行服务器端代码?

嗯,是的,你可以。但话说回来,这个巨大的往返过程将发生。

不过,我想我们可以引入一个更新面板。这意味着文本框在最新面板之外,例如,我们可以说显示文本框的结果,并为每次按键运行代码。我可以发布代码以及如何做到这一点,但总的来说,每次按键都要有一个完整的往返行程,这与每次按键都有一个提交按钮的想法非常相似——非常重。

因此,我不能强调记住,要运行/使用/让代码与网页交互,它只能在";"小";当页面被发布到服务器,代码运行,然后整个页面现在被重新发送回浏览器端时。在往返过程中,当页面在服务器上时,代码隐藏只能查看/触摸/修改/使用该页面上的控件。但它不会在那里停留很长时间——在所有代码运行后,整个页面现在都会发送回客户端。这也意味着,即使是像光标在文本框中的位置这样简单的东西也会丢失。你可以把往返过程想象成就像你刚刚按下了刷新键一样。

因此,您不需要在文本更改事件中使用任何代码。但是,请记住,当我们使用上述客户端JavaScript时,当我们更改焦点时,如果您仍然连接了服务器端文本更改事件(对于该文本框,postback=true(,则服务器端代码将运行,并将发生postback。既然我们真的不需要也不希望发生回发,那么我们当然会删除文本更改后的代码存根,并关闭该文本框的回发设置。

最新更新