我想出了两种方法都不太满意。
1,下拉到时候capture,在外边单击的时候releasecapture
这个情况有个问题,如果在外边的按钮上单击。按钮收不到消息
2.全局钩子
其他控件能收到消息啊,但是这个有点卡啊。
请各位帮忙出出主意

解决方案 »

  1.   

    其他地方是什么意思?1。如果是点击ComboBox的其他地方,这个比较好实现,不用讲了吧?
    2。如果是点击ComboBox以外的地方,当你失去焦点的时候,去处理不就行了吗?
      

  2.   

    单击其他控件的时候失去焦点,这种情况好处理,只要处理Leave事件就可以了。
    但是单击空白处呢。。讲讲吧
      

  3.   

    我想在除comboBox的所有控件的单击事件加上
    comboBox1.text = comboBox1.SelectedItem.ToString()
      

  4.   


    最笨的方法,在WinForm控件里面处理KeyDown事件
      

  5.   

    那岂不是要在所有的控件里都加上KeyDown。那如果点击其他程序的话就捕捉不到了
    不知道.Net内部的ToolStripManager是怎么处理
    我要的效果是vs标准工具栏中那个下拉搜索的控件的效果。(单击输入框,不关闭下拉框。单击其他地方(除了组合控件的任何地方包括其他程序)关闭)
      

  6.   

    给一个bt的办法
    在该控件添加到父容器的时候
    遍历顶级父容器的所有控件 并加上keydown事件
      

  7.   

    谢谢各位解答。最后还是用的钩子。就是关闭程序的时候有点卡。希望release时能好点/
                Point textTopLeft = base.Parent.PointToScreen(new Point(base.Left, base.Top));
                Rectangle rectText = new Rectangle(textTopLeft, base.Size);
                Point popTopLeft = new Point(this._dropDown.Left, this._dropDown.Top);
                Rectangle rect = new Rectangle(popTopLeft, this._dropDown.Size);            if (rectText.Contains(e.X, e.Y) || rect.Contains(e.X, e.Y))
                {            }
                else
                {
                    this._dropDown.Hide();
                }
      

  8.   

    补充下e.X e.Y为全局钩子返回的坐标(相对于屏幕) dropdown的坐标也是相对于屏幕的,就不用转了
      

  9.   

    最后把挂载钩子扔到线程池里处理了,就不卡了。注意处理时Invoke到UI线程,否则无效。Dispose的时候卸载掉