| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1088 人关注过本帖
标题:[求助]关于键盘事件中的一个循环的问题
只看楼主 加入收藏
lhf391855540
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-10-14
结帖率:0
收藏
 问题点数:0 回复次数:12 
[求助]关于键盘事件中的一个循环的问题

下面是程序原代码,在按向上或向左的方向键时,当Index=0的时候,程序运行会出错,应当如何解决这个问题,请各位高手指教。谢谢!

Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then '按回车键
Index = (Index + 1) Mod 41
Text1(Index).SetFocus
End If

If KeyCode = vbKeyDown Then '按向下方向键
Index = (Index + 1) Mod 41
Text1(Index).SetFocus
End If

If KeyCode = vbKeyUp Then '按向上方向键
Index = (Index - 1)
Text1(Index).SetFocus
End If

If KeyCode = vbKeyLeft Then '按向左方向键
Index = (Index - 1)
Text1(Index).SetFocus
End If

If KeyCode = vbKeyRight Then '按向右方向键
Index = (Index + 1) Mod 41
Text1(Index).SetFocus
End If

End Sub

搜索更多相关主题的帖子: 键盘 
2006-12-27 22:34
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
为什么要mod41?.

我的msn: myfend@
2006-12-28 09:25
lhf391855540
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-10-14
收藏
得分:0 

因为mod 41后才能产生循环。比如41个Text控件,编号从0--40,当Index=40时,40+1=41,而实际Index最大只有40而没有41,那么 mod 41后,其余数=0,那么,Index会重新从0开始,不会产生错误。否则就会有错误的提示。

2006-12-28 13:20
lhf391855540
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-10-14
收藏
得分:0 

因为mod 41后才能产生循环。比如41个Text控件,编号从0--40,当Index=40时,40+1=41,而实际Index最大只有40而没有41,那么 mod 41后,其余数=0,那么,Index会重新从0开始,不会产生错误。否则就会有错误的提示。

2006-12-28 13:20
lhf391855540
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-10-14
收藏
得分:0 
但当Index递减的时候,不知道如何解决这个问题。求高手指点。
2006-12-28 13:23
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
有问题,看下面的,另外要学会节省代码(当然有比下面还精简的代码)!
Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)

dim i as Integer

If KeyCode = vbKeyReturn Then '按回车键
i = (Index + 1)
End If

If KeyCode = vbKeyDown Then '按向下方向键
i = (Index + 1)
End If

If KeyCode = vbKeyUp Then '按向上方向键
i = (Index - 1)
End If

If KeyCode = vbKeyLeft Then '按向左方向键
i = (Index - 1)
End If

If KeyCode = vbKeyRight Then '按向右方向键
i = (Index + 1)
End If

if i<0 then i = i+41
i = i Mod 41
Text1(i).SetFocus

End Sub

2006-12-28 13:32
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyRight Or KeyCode = vbKeyDown Then
If Index = Text1.Count - 1 Then Index = -1
Text1(Index + 1).SetFocus
ElseIf KeyCode = vbKeyLeft Or KeyCode = vbKeyUp Then
If Index = 0 Then Index = Text1.Count
Text1(Index - 1).SetFocus
End If
End Sub

我的msn: myfend@
2006-12-28 13:37
purana
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
Right和Down不是一样么?..
Up和Left不是一样么?...那还要写两个代码?...
此代码测试过....没问题的..

Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyRight Or KeyCode = vbKeyDown Then
If Index = Text1.Count - 1 Then Index = -1
Text1(Index + 1).SetFocus
ElseIf KeyCode = vbKeyLeft Or KeyCode = vbKeyUp Then
If Index = 0 Then Index = Text1.Count
Text1(Index - 1).SetFocus
End If
End Sub

我的msn: myfend@
2006-12-28 13:39
lhf391855540
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-10-14
收藏
得分:0 
谢谢指教!我试试看
2006-12-28 13:41
lhf391855540
Rank: 1
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-10-14
收藏
得分:0 


Right和Down不是一样么?..
Up和Left不是一样么?...那还要写两个代码?...
此代码测试过....没问题的..

是一样的,但多几行代码在应用过程中可以多一种选择,其实也还是不错的哦!

2006-12-28 13:56
快速回复:[求助]关于键盘事件中的一个循环的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043841 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved