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


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

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

帅哥哟,离线,有人找我吗?
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事件,却不能 接受输入的字符,必须再次按下回车后,才能正常接受,然后又不行,再按下回车后,又正常,反复如此


 回到顶部
帅哥哟,离线,有人找我吗?
zhsenchzhi
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | 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()

不知为什么,总是不行

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


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

多谢

 回到顶部