以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  为什么文本框不能重新获得输入焦点呢?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=43078)

--  作者:zhsenchzhi
--  发布时间:2013/11/29 1:06:00
--  为什么文本框不能重新获得输入焦点呢?

一个输入文本框, 输入文本后,点击回车,执行一些代码, 做了 keydown 事件, 事件能够正确响应, 就是希望在 事件响应结束,输入焦点能够再回到该文本框,但是 不行,不知为什么,代码如下,写在该文本输入框的 keydown事件中

 

If e.KeyCode <> Keys.Enter Then
    Return
End If

Dim name As String =e.Form.Controls("TbFlushCard").text

If name Is Nothing OrElse name.trim.length<1 Then
    Dim btn As winform.button =e.Form.Controls("ButtonAll")
    btn.PerformClick
Else
   
    省略。。。
   
End If

 

e.Form.Controls("TbView").text=""
e.Form.Controls("TbFlushCard").text=""
e.Form.Controls("TbFlushCard").Select()

 

关键是代码的最后三行, 其中倒数第二、第三行 是将 两个 文本输入框的 输入清空,这两行能够正确执行,最后一行是将输入焦点 重新设置到 e.Form.Controls("TbFlushCard") 上面,但是就是实现不了,不知为什么

 

中间的代码是对一个表进行操作, 代码执行完毕后,输入焦点 停留在这个被操作的表上

 

请问该怎么办呢


--  作者:zhsenchzhi
--  发布时间:2013/11/29 1:34:00
--  
多谢,这么晚还没睡觉呀
--  作者:zhsenchzhi
--  发布时间:2013/11/29 1:56:00
--  

刚才试了这个方法:

e.Form.Controls("TbFlushCard").Select()
e.Form.Controls("TbFlushCard").BaseControl.Focus 

 

这段代码执行后,出现一个很奇怪的问题, 就是第一次执行完毕后, 当前输入焦点并不能 立刻回到该 文本框,此时,输入字符,该输入框接收不到输入的字符,(经过试验,此时该输入框虽然接受不到字符,但是按下回车键还能相应 keydown事件)必须敲一下回车键,然后才能回到焦点并接受输入字符,

 

然后 再 执行,第一次还是回不到该文本框,必须再次敲一下回车,依此类推

 

请问这又是怎么回事呀,

 

就是 一个输入文本框,输入字符后,按下回车,相应keydown事件,执行完毕后 ,再执行以下代码

 

e.Form.Controls("TbFlushCard").Select()
e.Form.Controls("TbFlushCard").BaseControl.Focus 

 

此时 该文本框 能够相应 按下回车的 keydown事件,却不能 接受输入的字符,必须再次按下回车后,才能正常接受,然后又不行,再按下回车后,又正常,反复如此


--  作者:逛逛
--  发布时间:2013/11/29 10:38:00
--  

一个偷懒的方法

 

e.Form.Controls("TbFlushCard").Select()

 

改成:

 

e.Cancel = True

 

代码执行完后,撤销此次按键


--  作者:zhsenchzhi
--  发布时间:2013/11/30 8:03:00
--  

多谢 楼上的两位耐心解答,通过测试, 最后 还是使用

e.Cancel = True

  这种方式 解决问题了,

 

使用

e.Form.Controls("TbFlushCard"). BaseControl.SelectionLength = 1  代表选中文本的长度
e.Form.Controls("TbFlushCard"). BaseControl.SelectionStart = 0       \'代表光标的位置
e.Form.Controls("TbFlushCard").Select()

不知为什么,总是不行
--  作者:逛逛
--  发布时间:2013/11/30 19:00:00
--  
以下是引用zhsenchzhi在2013-11-30 8:03:00的发言:

多谢 楼上的两位耐心解答,通过测试, 最后 还是使用

e.Cancel = True

  这种方式 解决问题了,

 

使用

e.Form.Controls("TbFlushCard"). BaseControl.SelectionLength = 1  代表选中文本的长度
e.Form.Controls("TbFlushCard"). BaseControl.SelectionStart = 0       \'代表光标的位置
e.Form.Controls("TbFlushCard").Select()

不知为什么,总是不行

因为回车键、F1键等都是常用键,很多程序都有事件处理程序写在里面

e.Cancel = True    其实是告诉系统,你已经处理完本次事件了。

否则,系统处理完你的代码后,会接着处理后续的代码,像回车键就是将焦点转移到下个Tab序号的控件。

让你产生代码不起作用的错觉。

 

 


--  作者:zhsenchzhi
--  发布时间:2013/12/1 9:44:00
--  
多谢