以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 用Sendkeys.Send键入问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=62171) |
-- 作者:zunwoun -- 发布时间:2014/12/26 16:32:00 -- 用Sendkeys.Send键入问题 我在平板上使用的程序上增加了一个虚拟键盘窗口,方便录入,每次在虚拟键盘窗口中按一下,自动在该输入地方利用“Sendkeys.Send” 命令键入一个字符,在textbox等控件上操作没有问题,但在RecordGrid上操作时,会出现输入一个字符把前一个字符覆盖掉,所以无论输入多少都只是显示最后一个字符,请教版主有什么办法解决.(用windows8系统自带的虚拟键盘不存在这个问题),我大概猜是一下代码出问题: Forms(e.Form.Controls("窗口名").text).Controls(e.Form.Controls("控件名").text).Select() 因为textbox控件一选择就只有一个选择,而RecordGrid有很多项目,但输入上鼠标还是在需要编辑的字段上没有移动。
[此贴子已经被作者于2014-12-26 16:36:59编辑过]
|
-- 作者:有点甜 -- 发布时间:2014/12/26 16:36:00 -- 在输入之前,你都是要选择到对应的控件的吧?设置焦点以后,先send一个空格过去。 |
-- 作者:zunwoun -- 发布时间:2014/12/26 16:40:00 -- 如果先send一个空格过去,会不会在textbox等控件出现多输入一个字符 |
-- 作者:有点甜 -- 发布时间:2014/12/26 16:45:00 -- 或者你先上传例子你是怎么做的吧。 |
-- 作者:zunwoun -- 发布时间:2014/12/26 16:45:00 -- 经过尝试,这种方法不行 |
-- 作者:有点甜 -- 发布时间:2014/12/26 16:46:00 -- 例子发上来。 |
-- 作者:zunwoun -- 发布时间:2014/12/26 16:54:00 -- 在需要输入控件时触发打开虚拟键盘窗口,在虚拟键盘窗口上在对应控件上按click触发以下代码,如果需要输入的是textbox控件一切都正常,如果输入的是RecordGrid控件就会出现上述问题 If Forms(e.Form.Controls("窗口名").text).opened=True Forms(e.Form.Controls("窗口名").text).Controls(e.Form.Controls("控件名").text).Select() If e.sender.text.length=1 Select Case e.sender.text Case "+","^","%","~","(",")" Sendkeys.Send("{END}") Sendkeys.Send("{" & e.sender.text & "}") Case Else Sendkeys.Send("{END}") Sendkeys.Send(e.sender.text) End Select Else Select Case e.sender.text Case "123符" For Each c As WinForm.Control In e.Form.Controls c.left=c.left-e.Form.BaseForm.Width Next Case "abc" For Each c As WinForm.Control In e.Form.Controls c.left=c.left+e.Form.BaseForm.Width Next Case "大写" e.sender.text="小写" For Each c As WinForm.Control In e.Form.Controls If c.name.length=1 Dim t As WinForm.Button = c \'使用特定类型的变量引用控件 If Char.Isletter(t.text) Then t.text=t.text.ToUpper() End If End If Next Case "小写" e.sender.text="大写" For Each c As WinForm.Control In e.Form.Controls If c.name.length=1 Dim t As WinForm.Button = c \'使用特定类型的变量引用控件 If Char.Isletter(t.text) Then t.text=t.text.tolower() End If End If Next Case "shift" Sendkeys.Send("+") Case "换行" Sendkeys.Send("{Enter}") Case "空格" Sendkeys.Send(" ") Case "后退" Sendkeys.Send("{BACKSPACE}") Case "完成" e.Form.close End Select End If End If
|
-- 作者:有点甜 -- 发布时间:2014/12/26 17:10:00 -- select之后,send一个空格过去啊
Forms(e.Form.Controls("窗口名").text).Controls(e.Form.Controls("控件名").text).Select() Sendkeys.Send(" ")
|
-- 作者:zunwoun -- 发布时间:2014/12/26 17:22:00 -- 经过测试,版主的方法是可行的,但仅限于RecordGrid控件输入时使用该方法,其他控件不需要,谢谢版主! |
-- 作者:zunwoun -- 发布时间:2014/12/27 12:39:00 -- 再次请教版主,RecordGrid控件输入时,用Sendkeys.Send(“{BACKSPACE}")无法清除第一个字符,虽然不显示第一个字符,但用Sendkeys.Send输入我认为的第一个字符时,就会把原有字符显示出来,连我输入的字符变成第二个字符,如果不输入,字段值还是原来第一个字符,请赐教 |