Foxtable(狐表)用户栏目专家坐堂 → 请教:文本框控件光标控制


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

主题:请教:文本框控件光标控制

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


加好友 发短信
等级:六尾狐 帖子:1425 积分:11332 威望:0 精华:0 注册:2008/9/1 22:20:00
请教:文本框控件光标控制  发帖心情 Post By:2015/3/10 17:20:00 [只看该作者]

以下代码如果放在控件的click事件中,可以达到效果。
Dim tx As WinForm.TextBox= e.Form.Controls("TextBox1")
tx.SelectionStart = 3 
tx.SelectionLength = 2

问题:
1、上述代码如果在写到旁边的按钮事件里为何无效?
2、想通过键盘左右方向键控制光标,为何以下代码无效(文本框KeyDown事件)?


Dim n As Integer
n= e.Sender.Text.IndexOf("-")
Select Case e.KeyCode
Case Keys.right
                If e.Sender.SelectionStart = 3 Then
                     e.Sender.SelectionStart = 6
                     e.Sender.SelectionLength = 2
                 ElseIf e.Sender.SelectionStart = 6 Then
                       e.Sender.SelectionStart = 9
                       e.Sender.SelectionLength = 2
  endif
end select



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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/3/10 17:26:00 [只看该作者]

Dim tx As WinForm.TextBox= e.Form.Controls("TextBox1")
tx.SelectionStart = 3 
tx.SelectionLength = 2
tx.select

2.上例子看看

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


加好友 发短信
等级:六尾狐 帖子:1425 积分:11332 威望:0 精华:0 注册:2008/9/1 22:20:00
  发帖心情 Post By:2015/3/10 17:29:00 [只看该作者]

Dim tx As WinForm.TextBox= e.Form.Controls("TextBox1")
tx.SelectionStart = 3 
tx.SelectionLength = 2
tx.select

上述代码运行后,控件里所有文本都被选中了,并未实现效果。

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


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

1、

 

Dim tx As WinForm.TextBox= e.Form.Controls("TextBox1")
tx.select
tx.SelectionStart = 3 
tx.SelectionLength = 2
 
2、加入一句 e.Cancel = True

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


加好友 发短信
等级:六尾狐 帖子:1425 积分:11332 威望:0 精华:0 注册:2008/9/1 22:20:00
  发帖心情 Post By:2015/3/10 19:11:00 [只看该作者]

谢谢,第一个问题解决了,第二个还是卡壳。

比如文本框内容为:
00-11-22

在编辑时,如果按下键盘right(→)键,则判断当前光标位置,自动跳到下一个“-”之后并选中两位数字,但运行无效果。
求指教!
Dim n As Integer
n= e.Sender.Text.IndexOf("-")
Select Case e.KeyCode
Case Keys.right
                If e.Sender.SelectionStart >= 0  andalso e.Sender.SelectionStart <2 Then
                     e.Sender.SelectionStart = 3
                     e.Sender.SelectionLength = 2
                 ElseIf e.Sender.SelectionStart >= 3  andalso e.Sender.SelectionStart <5 Then
                       e.Sender.SelectionStart = 6
                       e.Sender.SelectionLength = 2
        endif
end select


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


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

 测试有效啊,不行,请上传例子。

 

 输入内容以后,用右键有效啊

 

Select Case e.KeyCode
    Case Keys.right
        If e.Sender.SelectionStart >= 0  AndAlso e.Sender.SelectionStart <2 Then
            e.Sender.SelectionStart = 3
            e.Sender.SelectionLength = 2
            e.cancel = True
        ElseIf e.Sender.SelectionStart >= 3  AndAlso e.Sender.SelectionStart <5 Then
            e.Sender.SelectionStart = 6
            e.Sender.SelectionLength = 2
            e.cancel = True
        End If
End Select


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


加好友 发短信
等级:六尾狐 帖子:1425 积分:11332 威望:0 精华:0 注册:2008/9/1 22:20:00
  发帖心情 Post By:2015/3/10 20:07:00 [只看该作者]

谢谢有点甜,确实解决了,是e.cancel = True没有用对地方。

 回到顶部