none
winform自定义控件,如何让他失去焦点 RRS feed

  • 问题

  • 我做了一个自定义控件 

    ComboBox+TreeView,现在有一个问题,当我使用这个控件 时,如果他失去焦点,就会自动收缩,但

    我想实现的是类似ComboBox收缩一样的功能,在点击Form1空白处时,ComboBox下拉框也可以收缩

    而我的自定义控件却不行,非得在Form1上找个控件,点一下(让其获得焦点),我的控件才能收缩,

     

    请高人指点

    2010年7月16日 13:24

答案

  • 你好!

         你的控件无法自己控制自己失去输入焦点,只有其他控件获得焦点,你的控件才能失去。

         ComboBox的这个行为是操作系统来控制的,并非编程来实现的,你如果想这样,你继承ComboBox来实现。


    周雪峰
    2010年7月19日 7:27
    版主

全部回复

  • 在你的ComboBox中使用 GetCapture 捕获鼠标位置,以决定什么时候显示,或是隐藏你的 TreeView.

     

    另外就是在ComboBox InActive 时也隐藏 TreeView,并ReleaseCapture.

     

    好像基本原理就这样,我在MFC中是这么实现的。

    2010年7月16日 13:38
  • 鼠标位置不重要,重要的是点击了form的空白处时也隐藏
    2010年7月16日 13:49
  • GetCapture  的作用就是你在ComboBox以外点击鼠标后,在ComboBox中仍然能收到鼠标点击的事件,根据当时鼠标的位置,判断出鼠标是在Combox(包括TreeView)内点击的鼠标,还是在之外点击的鼠标。
    2010年7月16日 14:06
  • 你把treeview放到用户控件中,treeview有个失去焦点的事件,你可以把这个事件暴露在外面,来进行判断

     treeView1.LostFocus+=new EventHandler(treeView1_LostFocus);


    http://blog.csdn.net/zx13525079024
    2010年7月16日 14:51
  • 子控件得不到父控件的事件,不知道怎么写
    2010年7月16日 15:30
  • 你可以把TREEVIEW控件的失去焦点事件暴露给用户控件,。

    你给用户控件定义一个失去焦点的事件,你要自定义一个委托,自定义一个事件,然后用这个自定义事件和TREEVIEW失去焦点事件进行关联,

    一旦触发TREEVIEW失去焦点事件,就发了这个自定义事件


    http://blog.csdn.net/zx13525079024
    2010年7月17日 15:32
  • treeview就没有失去焦点,如果可以,帮忙看下: https://yongfa365doc.googlecode.com/svn/trunk/TreeViewDemo
    2010年7月18日 1:25
  • 这个DEMO,你参照下

    http://www.codeproject.com/KB/combobox/CustomDDComboBox.aspx


    http://blog.csdn.net/zx13525079024
    2010年7月18日 15:37
  • 你好!

         你的控件无法自己控制自己失去输入焦点,只有其他控件获得焦点,你的控件才能失去。

         ComboBox的这个行为是操作系统来控制的,并非编程来实现的,你如果想这样,你继承ComboBox来实现。


    周雪峰
    2010年7月19日 7:27
    版主
  • 我按照你说的也做了一个这样的自定义控件,发现没有你说的问题。如果有什么问题你联系我吧。把代码发给我,我帮你看看

    2010年7月22日 3:43