根本不用编程呀!放好CheckBox按Left, Right, Up, Down就可以啦!

解决方案 »

  1.   

    同意Unl。把Check2放到Check4位置,Check4放到Check3位置...
    依次类推。
    不就可以了吗?
      

  2.   

    同意chen_lin 的意见
    再者就是设置几个checkbox的TAB 键顺序
      

  3.   

    It' to easy: Reset 'Tab order'...OK!@_@
      

  4.   

    将check4的Table index设置为check1后一位即可
      

  5.   

    我想你的问题大概是想使用左右上下键来控制checkbox的焦点,而不是按照tabindex的顺序吧
    可能需要钩子函数拦截键盘信息,再手工处理checkbox的焦点
      

  6.   

    可把CHECKBOX设为控件数组,然后在CHECKBOX的KEYDOWN事件中编程。如:
    if keycode=vbkeyright then
       check(4).setfocus
    end if
      

  7.   

    可把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
      

  8.   

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

  9.   

    我试了试,可能很难实现.当我把form的keypreview=true,焦点设在check1上时,虽然能得到home,end等键,但就是得不到up,down等键,因此我猜想,vb的form的windowproc里对up,down做了重新解释,而我在VC里试则没有问题。所以你真的需要hook函数来做,或者得自已编制一个自绘的checkbox控件了
      

  10.   

    你可以使用以下办法:
    在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 )
      

  11.   

    我也试了一下.当form的keypreview=true,第一次得不到方向键,但得到了其他键后,又能得到方向键了,非常奇怪!
      

  12.   

    HI,all:
       谢谢各位,这么赏脸...小弟感激流涕...
    望大家能再帮我看看"?动动笔,就送118分(Visual basic)[Visual Basic]"这个问题,Ok?  ^_^
      

  13.   

    同意 kangda !
    按需要将tabIndex顺序设置即可。
      

  14.   

    很简单的
    我已经在“VB-CheckBox太神奇了...”一文中回答你了,只要稍微改改:
    1)确保check1.CausesValidation 属性值设置为True
    2)Private Sub Check1_Validate(Cancel As Boolean)
        Check4.setfocus
      End Sub
    vbjj,是不是该把两个题目的分都给我,快!!!
      

  15.   

      我是用C++Builder的,虽然没有用过VB,我想它和VFoxPro差不多,能否这样解决(异想天开)
      在表单上先放容器空间Grid(类似电子表格),再把各CheckBox放到Grid里边,不知行不,我无法给出VB程序。   
      

  16.   

    我想这不大可能!微软的CHECKBOX在某个容器(如FORM中),它的UP,LEFT键就相当于SHIFT+TAB键,而DOWN,RIGHT键就相当于TAB键!!
    那位高手,如果能不加CODE,就能解决的话,不要忘了告诉我。
    我的伊妹儿:[email protected]