Foxtable(狐表)用户栏目专家坐堂 → 为什么文本框不能重新获得输入焦点呢?


  共有4872人关注过本帖树形打印复制链接

主题:为什么文本框不能重新获得输入焦点呢?

帅哥哟,离线,有人找我吗?
zhsenchzhi
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
为什么文本框不能重新获得输入焦点呢?  发帖心情 Post By: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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2013/11/29 1:34:00 [只看该作者]

多谢,这么晚还没睡觉呀

 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By: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事件,却不能 接受输入的字符,必须再次按下回车后,才能正常接受,然后又不行,再按下回车后,又正常,反复如此


 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2013/11/29 10:38:00 [只看该作者]

一个偷懒的方法

 

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

 

改成:

 

e.Cancel = True

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By: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()

不知为什么,总是不行

 回到顶部
帅哥哟,离线,有人找我吗?
逛逛
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:423 积分:3196 威望:0 精华:0 注册:2013/5/10 10:01:00
  发帖心情 Post By:2013/12/1 9:44:00 [只看该作者]

多谢

 回到顶部