以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  请教:文本框控件光标控制  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=65177)

--  作者:bahamute
--  发布时间: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
--  发布时间: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
--  发布时间:2015/3/10 17:29:00
--  
Dim tx As WinForm.TextBox= e.Form.Controls("TextBox1")
tx.SelectionStart = 3 
tx.SelectionLength = 2
tx.select

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

--  作者:有点甜
--  发布时间: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
--  发布时间: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


--  作者:有点甜
--  发布时间: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
--  发布时间:2015/3/10 20:07:00
--  
谢谢有点甜,确实解决了,是e.cancel = True没有用对地方。