VB中的高难动作!!!

vbjj 2000-03-06 02:52:00
HI,All:
Easy or Difficult?
我的问题是:
例如:界面设计如下(check1~6均为checkbox)

[]check1 []check4
[]check2 []check5
[]check3 []check6

我现在的目的是:当我在check1处得到焦点时按下右向键,怎样才能将光标移到check4的位置,不添任何代码,它的运行结果是:移到check2的位置.

可参见另一问题:(也是我提的)
VB-CheckBox太神奇了...

Thanks

vbjj 3.6 14:44
...全文
490 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
symansoft 2000-03-08
  • 打赏
  • 举报
回复
我是用C++Builder的,虽然没有用过VB,我想它和VFoxPro差不多,能否这样解决(异想天开)
在表单上先放容器空间Grid(类似电子表格),再把各CheckBox放到Grid里边,不知行不,我无法给出VB程序。
CoreA 2000-03-08
  • 打赏
  • 举报
回复
你真的好可爱:)
vbjj 2000-03-08
  • 打赏
  • 举报
回复
到现在我才真正感觉到社会主义大家庭的温暖啊!!!竟然有这么多的人... ...
risyoutou 2000-03-08
  • 打赏
  • 举报
回复
我想这不大可能!微软的CHECKBOX在某个容器(如FORM中),它的UP,LEFT键就相当于SHIFT+TAB键,而DOWN,RIGHT键就相当于TAB键!!
那位高手,如果能不加CODE,就能解决的话,不要忘了告诉我。
我的伊妹儿:risyoutou@sina.com
newsoft 2000-03-07
  • 打赏
  • 举报
回复
我也试了一下.当form的keypreview=true,第一次得不到方向键,但得到了其他键后,又能得到方向键了,非常奇怪!
Tony_Yuan 2000-03-07
  • 打赏
  • 举报
回复
你可以使用以下办法:
在bas中:
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Public Const WH_KEYBOARD = 2

Public gLngKeyHook As Long
Dim currentid As Integer

Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If wParam = 37 Then
....
ElseIf wParam = 39 Then ....
ElseIf wParam = 38 Then ....
ElseIf wParam = 40 Then ....
End If
KeyboardProc = -1
End Function

在form的load中:
currentid = 2
gLngKeyHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, GetCurrentThreadId)

在form的unload中:
UnhookWindowsHookEx gLngKeyHook

还剩下很多工作要做,如处理焦点,和键盘消息的传递(用到CallNextHookEx )
forgettor 2000-03-07
  • 打赏
  • 举报
回复
我试了试,可能很难实现.当我把form的keypreview=true,焦点设在check1上时,虽然能得到home,end等键,但就是得不到up,down等键,因此我猜想,vb的form的windowproc里对up,down做了重新解释,而我在VC里试则没有问题。所以你真的需要hook函数来做,或者得自已编制一个自绘的checkbox控件了
MarsXia 2000-03-07
  • 打赏
  • 举报
回复
很简单的
我已经在“VB-CheckBox太神奇了...”一文中回答你了,只要稍微改改:
1)确保check1.CausesValidation 属性值设置为True
2)Private Sub Check1_Validate(Cancel As Boolean)
Check4.setfocus
End Sub
vbjj,是不是该把两个题目的分都给我,快!!!


vbjj 2000-03-07
  • 打赏
  • 举报
回复
大家注意:我的目的就是:
在check2得到焦点时,
若按下up arrow键,check1得到焦点,
若按下down arrow键时,check3得到焦点,
若按下left arrow键时,焦点不移动,
若按下right arrow键时,check5得到焦点,
我是想使用左右上下键来控制checkbox的焦点,而不是按照tabindex的顺序。
至于tony_yuan所说的:
可能需要钩子函数拦截键盘信息,再手工处理checkbox的焦点
请明示。。。



vbjj 3.7 9:14
CCL 2000-03-07
  • 打赏
  • 举报
回复
同意 kangda !
按需要将tabIndex顺序设置即可。
vbjj 2000-03-07
  • 打赏
  • 举报
回复
HI,all:
谢谢各位,这么赏脸...小弟感激流涕...
望大家能再帮我看看"?动动笔,就送118分(Visual basic)[Visual Basic]"这个问题,Ok? ^_^
skyhf 2000-03-06
  • 打赏
  • 举报
回复
可把CHECKBOX设为控件数组,然后在CHECKBOX的KEYDOWN事件中编程。如:
private sub checkbox_keydown(index as integer....)
select case index
case 1
if keycode=vbkeyright then
check(4).setfocus
end if
end select
end sub
skyhf 2000-03-06
  • 打赏
  • 举报
回复
可把CHECKBOX设为控件数组,然后在CHECKBOX的KEYDOWN事件中编程。如:
if keycode=vbkeyright then
check(4).setfocus
end if
Tony_Yuan 2000-03-06
  • 打赏
  • 举报
回复
我想你的问题大概是想使用左右上下键来控制checkbox的焦点,而不是按照tabindex的顺序吧
可能需要钩子函数拦截键盘信息,再手工处理checkbox的焦点
kangda 2000-03-06
  • 打赏
  • 举报
回复
将check4的Table index设置为check1后一位即可
Lin 2000-03-06
  • 打赏
  • 举报
回复
It' to easy: Reset 'Tab order'...OK!@_@
TRUE 2000-03-06
  • 打赏
  • 举报
回复
同意chen_lin 的意见
再者就是设置几个checkbox的TAB 键顺序
Chen_Lin 2000-03-06
  • 打赏
  • 举报
回复
同意Unl。把Check2放到Check4位置,Check4放到Check3位置...
依次类推。
不就可以了吗?
Un1 2000-03-06
  • 打赏
  • 举报
回复
根本不用编程呀!放好CheckBox按Left, Right, Up, Down就可以啦!

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧