画面上有两个控件一个TEXT控件和TreeView控件
TEXT控件的LostFocus事件中,有对TEXT控件中内容正确性的Check,如果不正确,光标需要置回TEXT控件中(不能用TEXT控件的Validate事件,因为是规定)现在,我在TEXT中输入了一个错误的内容,然后把鼠标直接点了TreeView控件中Checkbox框,根据上面情况,就出先焦点回到TEXT控件中,被点击的Checkbox框被钩上了有什么办法能让被点击Checkbox框不被钩上,却触发LostFocus事件让光标回到TEXT控件中

解决方案 »

  1.   

    不用validate,也不用lostFocus事件,允许吗?
      

  2.   

    在光标离开TEXT控件时,内容的正确性的Check还是要的
      

  3.   

    在文本框gotfocus的时候将TreeView的Enabled设为False
    不要受现在的计算机教材的误导
    由于现在计算机书籍市场很混乱
    导致翻译问题频频发生焦点是这些东西的翻译:
    Cursor:鼠标光标
    Capture:鼠标捕获
    Caret:插入符(键盘光标)
    IME focus:输入法焦点
    Focus:键盘焦点(可以接受键盘事件)
    Active Window:当前窗口
      

  4.   

    在文本框gotfocus的时候将TreeView的Enabled设为False的话,什么时候再设回来呢,因为我在文本框输入时,随时会可能去点TreeView控件的
      

  5.   

    其实你跟踪一下事件的发生经过就知道:
    打勾是在lostFocus发生之前完成的,所以lostFocus事件在这个问题中没有什么帮助:
    要么就在程序中固定当TREEVIEW被单击时改变了哪一个NODE,然后再改回来
    要么就用API拦截事件
      

  6.   

    要知道改变了哪一个NODE,应该已经触发了NodeCheck事件了吧,
    其实我是要先通过文本框CHK,才判断Checkbox框是否要钩上,通过才钩上,不通过不勾
    能不用API的话最好不用
      

  7.   

    不能用TEXT控件的Validate事件,因为是规定
    ----------------------------------是谁规定的?用Validate事件验证是标准做法
      

  8.   

    用Validate做会不导致退出按钮不能用,退出按钮是用LBL做的,没有CausesValidation
      

  9.   

    最终绝招(实在没有其他办法时用的,对程序员功力要求较高):
    用窗口子类化技术过滤TreeView的消息
    监测WM_LBUTTONDOWN,一旦发现点击的是复选框(发LVM_HitTest消息测试),且现在处于编辑状态时
    调用你写的验证函数,若通过,继续执行;若不通过,拦截掉该消息