怎么判断一个窗体的里的控件的焦点发生了变化?我用CallWindowProc 在跟踪一个窗体的时候,如果窗体内的控件的焦点发生了变化,那返回事件的参数是哪个

解决方案 »

  1.   

    Form的ActiveControl属性
    返回拥有焦点的控件
      

  2.   

    可怜,
    我的问题没有谁回答吗?
    OK 那再再问一个问题,要怎么要样 让Line    显示在Command的前面
      

  3.   

    什么意思啊?
    用控件的losefocus事件就是在控件失去焦点时产生的啊?
      

  4.   

    那要在每个控件上都去写吗,而且还要每个控件GOTFOCUS 上去写呀
      

  5.   

    每个控件都有losefocus事件和SETFOCUS事件,用来控制焦点
      

  6.   

    Form的ActiveControl属性
    form.activecontrol ???
    然后怎么用啊?
      

  7.   

    那要在每个控件上都去写吗,而且还要每个控件GOTFOCUS 上去写呀
    调用同一段程序啊,又不麻烦
      

  8.   

    使用控件数组的losefocus事件和SETFOCUS事件
      

  9.   

    直观的感觉是这样做的:
    拦截Windows消息,得到事件信息,根据消息进行分析处理。
    可惜哪一个(或几个)消息我不知道,API常数里 WM 带头的实在太多了。
      

  10.   

    羞答答的提供一个笨办法(若有好办法,请拿出来):
    Option ExplicitPrivate Sub Timer1_Timer() 'interval 设得小一点(50以内吧)
    Static initialized As Boolean
    Static ActControl As Control
        If Not initialized Then
            Set ActControl = Form1.ActiveControl
            initialized = True
        End If
        
        If Not ActControl Is Form1.ActiveControl Then
            MsgBox "焦点变了"
            Set ActControl = Form1.ActiveControl
        End If
    End Sub我调试过了,很好。
      

  11.   

    用Timer1_Timer  控件我也早就想过了,,只不过怕太耗资料了
      

  12.   

    ^-^多数人与你想的一样。其实这个控件的优先率是很低的,不耗什么资源。Windows常规的也是在不断循环的。我说的“笨办法”,是因为有可能焦点变化太快,而Timer1反应不过来(优先率低)。耗资源不用担心。