Foxtable(狐表)用户栏目专家坐堂 → 用Sendkeys.Send键入问题


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

主题:用Sendkeys.Send键入问题

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


加好友 发短信
等级:童狐 帖子:248 积分:3073 威望:0 精华:0 注册:2012/5/13 14:59:00
用Sendkeys.Send键入问题  发帖心情 Post By:2014/12/26 16:32:00 [只看该作者]

我在平板上使用的程序上增加了一个虚拟键盘窗口,方便录入,每次在虚拟键盘窗口中按一下,自动在该输入地方利用“Sendkeys.Send” 命令键入一个字符,在textbox等控件上操作没有问题,但在RecordGrid上操作时,会出现输入一个字符把前一个字符覆盖掉,所以无论输入多少都只是显示最后一个字符,请教版主有什么办法解决.(用windows8系统自带的虚拟键盘不存在这个问题),我大概猜是一下代码出问题:
Forms(e.Form.Controls("窗口名").text).Controls(e.Form.Controls("控件名").text).Select()
因为textbox控件一选择就只有一个选择,而RecordGrid有很多项目,但输入上鼠标还是在需要编辑的字段上没有移动。
[此贴子已经被作者于2014-12-26 16:36:59编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/26 16:36:00 [只看该作者]

 在输入之前,你都是要选择到对应的控件的吧?设置焦点以后,先send一个空格过去。

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


加好友 发短信
等级:童狐 帖子:248 积分:3073 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By:2014/12/26 16:40:00 [只看该作者]

如果先send一个空格过去,会不会在textbox等控件出现多输入一个字符

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/26 16:45:00 [只看该作者]

  或者你先上传例子你是怎么做的吧。

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


加好友 发短信
等级:童狐 帖子:248 积分:3073 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By:2014/12/26 16:45:00 [只看该作者]

经过尝试,这种方法不行

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/26 16:46:00 [只看该作者]

 例子发上来。

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


加好友 发短信
等级:童狐 帖子:248 积分:3073 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By: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

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/12/26 17:10:00 [只看该作者]

 select之后,send一个空格过去啊

 

Forms(e.Form.Controls("窗口名").text).Controls(e.Form.Controls("控件名").text).Select()

Sendkeys.Send(" ")

 


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


加好友 发短信
等级:童狐 帖子:248 积分:3073 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By:2014/12/26 17:22:00 [只看该作者]

经过测试,版主的方法是可行的,但仅限于RecordGrid控件输入时使用该方法,其他控件不需要,谢谢版主!

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


加好友 发短信
等级:童狐 帖子:248 积分:3073 威望:0 精华:0 注册:2012/5/13 14:59:00
  发帖心情 Post By:2014/12/27 12:39:00 [只看该作者]

再次请教版主,RecordGrid控件输入时,用Sendkeys.Send(“{BACKSPACE}")无法清除第一个字符,虽然不显示第一个字符,但Sendkeys.Send输入我认为的第一个字符时,就会把原有字符显示出来,连我输入的字符变成第二个字符,如果不输入,字段值还是原来第一个字符,请赐教

 回到顶部
总数 11 1 2 下一页